15

我想要一个 ssh 进入机器的命令,运行命令(cd 或执行脚本或 su),然后给我 shell。将命令传递给 ssh 似乎总是退出。

我正在寻找的一些例子:'ssh me@machine1 "./executeMyScript && cd /developmentDirectory"' 然后它给了我我的 shell。

我想这样做的原因是因为我使用的是 mrxvt(选项卡式 x 术语),它允许我为所有选项卡定义命令以在启动时执行。我想在同一台机器上有几个 ssh 连接,但让它们在 ssh 之后做不同的事情。

-抢

谢谢!

4

5 回答 5

10

实际上,其他答案的变化,使用 ssh 的 -t 选项来强制伪 tty 分配:

ssh -t me@machine ./executeMyScript '&&' bash -i
于 2009-10-27T23:04:08.117 回答
4

怎么样

    ssh me@machine ./executeMyScript '&&' bash -i

您必须引用&&它,以便将其传递给远程机器,而不是被本地 shell 吞下。

引用一个';'字符,您也可以更改您的起始目录:

    ssh me@machine ./executeMyScript '&&' cd /developmentDirectory ';' bash -i
于 2009-10-27T21:26:14.370 回答
2

在要运行的脚本的末尾放置类似这样的内容:

bash -li

这将 Bash 作为交互式登录 shell 启动。它并不完美,因为您会错过TERM转发之类的东西,但它可能足以满足您的需求。

如果这还不够,我只需进行两次单独的 ssh 调用,一次运行脚本,另一次让我登录。

于 2009-10-27T21:27:10.360 回答
2

如何使用 ssh_config 中的 SendEnv 选项将特定环境选项从本地计算机发送到远程计算机,然后在远程主机的配置中检查该环境变量?

在您的 .ssh/special-config-file 中:

remotehost:
    SendEnv *

您的本地脚本:

RUN_THIS_FIRST_COMMAND=blah
ssh -F special-config-file

您的远程 .bash_profile:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then
    $RUN_THIS_FIRST_COMMAND
fi

您可能需要检查其中一些行,我只是从手册页中将它们放在一起,并且之前没有尝试过任何这些。就我个人而言,我不喜欢为此解决方案同时修改我的本地和远程环境。

于 2009-10-27T22:55:16.900 回答
1

这对我有用。

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i"
于 2014-08-08T18:43:39.577 回答