运行ssh并立即执行命令

时间:2013-08-29 23:38:32

标签: bash unix ssh

我正在尝试查找UNIX或bash命令,以便在连接到ssh服务器后运行命令。例如:

ssh name@ip "tmux list-sessions"

上面的代码有效,它会列出会话,但会立即断开连接。将它放在服务器端的sshrc中可以正常工作,但我需要能够在客户端输入它。我希望能够运行命令,登录,打开窗口,然后运行我设置的命令。我试过了

[command] | ssh name@ip

ssh name@ip [command]

ssh name@ip "[command]"

ssh -t name@ip [command]

3 个答案:

答案 0 :(得分:201)

ssh -t 'command; bash -l'

将执行该命令,然后在完成时启动登录shell。例如:

ssh -t user@domain.com 'cd /some/path; bash -l'

答案 1 :(得分:13)

如果启用了LocalCommand选项,您可以使用PermitLocalCommand命令行选项:

ssh username@hostname -o LocalCommand="tmux list-sessions"

有关可用选项的更多详细信息,请参阅ssh_config手册页。

答案 2 :(得分:5)

这不是完全您正在寻找的东西,但我发现它在类似情况下很有用。

我最近在我的$HOME/.bashrc中添加了以下内容(除了bash之外,其他类似的内容应该是可能的):

if [ -f $HOME/.add-screen-to-history ] ; then
    history -s 'screen -dr'
fi

我在一台特定的计算机上运行了screen会话,但我发现有ssh个与该计算机连接的问题已被删除,要求我重新运行screen -dr每次我重新连接。

使用这个添加,并在我的主目录中创建该(空)文件后,我的shell启动时会在历史记录中自动获得screen -dr命令。重新连接后,我只需输入 Control-P Enter ,然后回到我的屏幕会话中 - 或者我可以忽略它。它是灵活的,但不是完全自动,在您的情况下,它比键入tmux list-sessions更容易。

您可能希望history -s命令无条件。

这需要更新每个目标系统上的$HOME/.bashrc,这可能会或可能不会使其不适合您的目的。