关于bash:运行ssh并立即执行命令

Run ssh and immediately execute command

本问题已经有最佳答案,请猛点这里访问。

我试图找到unix或bash命令,以便在连接到ssh服务器之后运行命令。例如:

1
ssh name@ip"tmux list-sessions"

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

1
2
3
4
5
6
7
[command] | ssh name@ip

ssh name@ip [command]

ssh name@ip"[command]"

ssh -t name@ip [command]


1
ssh -t 'command; bash -l'

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

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


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

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

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


这不是你想要的,但我发现它在类似的情况下很有用。

我最近在我的$HOME/.bashrc中添加了以下内容(对于bash以外的shell,应该可以使用类似的内容):

1
2
3
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,这可能会使它不适合您的目的。