通常,如果您像这样将命令传递给ssh
ssh me@example.com 'some-command.sh'
您将获得一个非交互式会话,并且在运行命令(或脚本或任何其他内容)后,ssh将立即退出。如何获得交互式会话,但如何运行从本地计算机指定的命令。例如,我希望能够打开屏幕并重新启动特定的屏幕会话:
ssh me@example.com 'screen -r 12345'
但这是不允许的,并返回错误“必须连接到终端”。我认为这实际上意味着“必须从交互式外壳程序中调用此命令”。
再举一个例子,我在工作中使用大量机器,经常需要我使用一个共享帐户才能执行某些操作的权限(是的,我知道:不好的主意,但不要怪我,我没有设置这些功能)方式),并且通常将ksh作为默认外壳。我想登录,切换到bash(或zsh),并获取我自己帐户的.bash_profile(或.zshrc)。如果我可以建立一个交互式ssh会话并将命令传递给远程计算机以在登录时运行,这将很容易。
我会发布一个非常笨拙(未经测试)的解决方案,但我希望有人知道更好的方法。
更新:对于那些没有意识到这一点的人,我不打算手工完成所有这些,因此,告诉我打开一个交互式会话然后手动进行,实际上并没有解决任何问题。
第二次更新:再次尝试澄清:我正在尝试在服务器上运行(任意)命令(在客户端上以编程方式指定),但随后打开了一个交互式会话,该会话受那些编程命令所执行的任何操作的影响。
echo "command" | ssh user@remote_host