我希望能够ssh
在继续我的工作之前访问远程主机并在其上运行一些重复的命令。
我一直尝试以下命令,但没有成功:
ssh [email protected] 'source /path/to/my/bashrc; ls /logs'
命令运行良好,但是我没有得到一个可以继续我工作的 shell。
我在这里遗漏了什么?
答案1
你漏掉了一件事。如果你提供ssh
要运行的命令,会话将在会话结束时立即结束。这意味着你的ls
命令一结束,也会ssh
返回。为了实现你请求的行为,你需要在末尾添加bash
/并请求分配,如下所示:shell
tty
ssh -tt [email protected] 'source /path/to/my/bashrc; ls /logs; bash'
或者您可以bash
用您喜欢的其他 shell 替换该命令。
答案2
你没有获得 shell,因为当你将命令传递给 SSH 进行远程运行时,取代shell 调用。
如果您希望登录时发生某些事情,则应将这些添加到帐户的.bashrc
。 如果帐户是共享的,那么,(1) 停止这样做,(2) shell 可以通过多种方式确定究竟是谁登录并有条件地执行操作。
答案3
当我需要在远程主机上运行许多命令时,我喜欢使用 Here Documents[1]
ssh $SERVER << EOF
command 1
command 2
command 3
EOF