193

我试图在连接到 ssh 服务器后找到 UNIX 或 bash 命令来运行命令。例如:

ssh name@ip "tmux list-sessions"

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

[command] | ssh name@ip

ssh name@ip [command]

ssh name@ip "[command]"

ssh -t name@ip [command]
4

3 回答 3

300
ssh -t 'command; bash -l'

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

ssh -t user@domain.com 'cd /some/path; bash -l'
于 2013-08-29T23:56:53.533 回答
9

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

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

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

于 2013-08-29T23:43:07.607 回答
7

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

我最近将以下内容添加到我的$HOME/.bashrc(bash 以外的 shell 应该可以实现类似的东西):

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

我在一台特定的机器上保持一个screen会话运行,并且我遇到了与该机器的连接被断开的问题,每次重新连接时都ssh需要重新运行。screen -dr

添加后,在我的主目录中创建该(空)文件后,screen -dr当我的 shell 启动时,我会自动在我的历史记录中拥有该命令。重新连接后,我可以输入Control-P Enter并返回我的屏幕会话——或者我可以忽略它。它很灵活,但不是自动,在你的情况下它比打字更容易tmux list-sessions

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

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

于 2013-08-31T00:34:10.420 回答