我试图找到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]

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

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

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


ssh -t 'command; bash -l'

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

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

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

我最近在$HOME/中添加了以下内容。Bashrc(类似的东西应该可以用于bash以外的shell):

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

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

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

您可能希望将history -s命令设置为无条件的。

这需要更新$HOME/。Bashrc在每个目标系统上,这可能不适合也可能不适合您的目的。