SSH:远程运行脚本并留在那里

rat*_*esh 6 unix ssh shell

我希望在远程系统上运行脚本,然后希望留在该系统上。运行以下脚本:-

ssh user@remote logs.sh
Run Code Online (Sandbox Code Playgroud)

这确实运行了脚本,但是之后我又回到了主机系统。我需要留在偏远的地方。我尝试过..

ssh user@remote logs.sh;bash -l
Run Code Online (Sandbox Code Playgroud)

它以某种方式解决了问题,但仍然不能像命令一样完全用作新登录:

ssh user@remote
Run Code Online (Sandbox Code Playgroud)

或者,如果我可以在脚本中包含可以在脚本运行所在目录中打开bash终端的内容,那会更好。请提出建议。

Joh*_*024 6

尝试这个:

ssh -t user@remote 'logs.sh; bash -l'
Run Code Online (Sandbox Code Playgroud)

需要使用引号将两个命令都传递给ssh。该-t选项强制执行伪tty分配。

讨论区

考虑:

ssh user@remote logs.sh;bash -l
Run Code Online (Sandbox Code Playgroud)

当外壳程序解析此行时,它将其分成两个命令。第一个是:

ssh user@remote logs.sh
Run Code Online (Sandbox Code Playgroud)

logs.sh在远程计算机上运行。第二个命令是:

bash -l
Run Code Online (Sandbox Code Playgroud)

这将在本地计算机上打开一个登录外壳。

上面添加了引号,以防止外壳程序以这种方式拆分命令。

  • 扔一个-t来分配一个pty是因为他试图获取一个交互式shell,而不仅仅是运行命令。并且如果您将命令传递给ssh,则默认情况下它不会分配tty (3认同)
  • 此外——在你的 `ssh` 会话结束后运行命令:`ssh -t user@remote 'logs.sh; bash -l'; echo "--[远程会话完成]--";`. 退出后会打印该消息。或者你可以拥有任何你喜欢的东西。 (2认同)