运行ssh并立即执行命令

cad*_*lac 146 unix ssh bash

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

ssh name@ip "tmux list-sessions"
Run Code Online (Sandbox Code Playgroud)

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

[command] | ssh name@ip

ssh name@ip [command]

ssh name@ip "[command]"

ssh -t name@ip [command]
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 226

ssh -t 'command; bash -l'
Run Code Online (Sandbox Code Playgroud)

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

ssh -t user@domain.com 'cd /some/path; bash -l'
Run Code Online (Sandbox Code Playgroud)

  • 我认为`exec bash -l`更好. (5认同)
  • 忘了我自己的语法,几乎放弃了!对于其他任何人,只需使用"; bash -l"后缀任何命令.也许你可以改成'[命令]; bash -l'还是一些澄清的东西?我会改变我的问题.谢谢! (3认同)
  • 运行良好,但这隐藏了命令提示符给我.有没有办法让它以通常的方式显示? (3认同)
  • 但是如果您尝试运行的脚本需要 bash 环境变量呢? (3认同)
  • @NobleUplift您可以在命令前放置一个明确的`source .bash_profile` (2认同)

Mig*_*rro 13

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

ssh username@hostname -o LocalCommand="tmux list-sessions"
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案是基于对这个问题的误解.问题是在连接后立即在远程服务器上运行命令.LocalCommand(顾名思义)在本地计算机上运行命令. (23认同)
  • RemoteCommand 是您在这里寻找的选项。`ssh name@ip -t -o RemoteCommand="tmux ls; bash"` 请参阅:https://man.openbsd.org/ssh_config#RemoteCommand (9认同)

Kei*_*son 6

这不是你在寻找什么,但我发现它在类似情况下非常有用.

我最近添加了以下内容$HOME/.bashrc(类似于bash以外的其他类似的东西):

if [ -f $HOME/.add-screen-to-history ] ; then
    history -s 'screen -dr'
fi
Run Code Online (Sandbox Code Playgroud)

screen在一台特定的机器上运行会话,并且我遇到了与ssh该机器的连接被丢弃的问题,screen -dr每次重新连接时都要求我重新运行.

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

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

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