SSH:远程运行脚本并保持连接

14

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

ssh user@remote logs.sh

这段代码确实执行了脚本,但之后我又回到了我的本地系统。我需要一直留在远程系统上。我已经尝试过了…

ssh user@remote logs.sh;bash -l

某种程度上解决了问题,但仍然不能像新登录那样正常工作,命令如下:

ssh user@remote

如果我能在我的脚本中包含一些东西,让它可以在与脚本相同的目录中打开bash终端,那就更好了。请提供建议。


你不能只是执行 ssh user@remote logs.sh; ssh user@remote 吗? - Biffen
“not working exactly as a fresh login” 是什么意思? - John Zwinck
它对我没用。确实,第一个命令(日志)已经正确运行了,但是当我按下CTRL-C键进入终端时,它就会完全中断SSH连接。 - Nir O.
1个回答

17

试试这个:

ssh -t user@remote 'logs.sh; bash -l'

引号是必需的,以便将两个命令传递给ssh-t选项强制进行伪终端分配。
讨论:
ssh user@remote logs.sh;bash -l

当shell解析此行时,它将其分成两个命令。第一个命令是:
ssh user@remote logs.sh

这个命令会在远程机器上运行 logs.sh 脚本。第二个命令是:

bash -l

这将在本地机器上打开一个登录Shell。

上面添加了引号,以防止Shell以此方式分割命令。


4
如果他想要获得一个交互式的 shell 而不仅仅运行一个命令,就需要在分配 pty 时加入 -t;如果你向 ssh 传递命令,则默认情况下不会分配 tty。 - Anya Shenanigans
@Petesh 谢谢。bash -i 可以工作,但 ssh -t 更好。回答已更新。 - John1024
2
另外 -- 在你的 ssh 会话结束后运行一个命令:ssh -t user@remote 'logs.sh; bash -l'; echo "--[remote session done]--";。该消息将在你退出后打印出来。或者你可以使用任何你喜欢的其他命令。 - will
1
如果远程机器上没有shell脚本,我们如何在本地机器上运行shell脚本而无需上传? - laughing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接