我正在尝试查找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]
答案 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
,这可能会或可能不会使其不适合您的目的。