我想通过 ssh 连接到另一台机器后自动运行命令,而不自动关闭 ssh 会话。
在搜索互联网后,我找到了一些解决方案,但没有一个能按照我需要的方式工作。
ssh bla@bla "ls"
这将在远程计算机上运行ls
命令,显示输出并关闭连接。
我还尝试使用编辑 ssh 配置文件
Host bla
HostName bla
User bla
IdentityFile ~/.ssh/key
RemoteCommand ls
RequestTTY force
同样的问题,通过 ssh 连接,运行ls
命令,显示输出,然后退出。甚至这个RequestTTY
选项也没有帮助。
ssh bla@bla "ls ; bash"
运行后不会断开连接ls
,但我没有得到完整的终端界面,只有一些不显示me@machine:~$ thing
.
我真正想要的:
要么是一些 bash 别名,要么.ssh/config
是允许我输入一个简单命令的条目,该命令将连接到远程计算机,然后在那里运行命令并使终端保持打开状态。基本上就像我用手做的一样:
类型
ssh blah@blah
然后连接后我会输入
ls
答案1
ssh bla@bla "ls ; bash"
运行后不会断开连接
ls
,但我没有得到完整的终端界面,只有一些没有显示内容的简单命令行me@machine:~$
。
如果您指定命令(例如ls ; bash
上面的命令),SSH 服务器将不会提供伪终端。你已经观察到了这一点。
另一方面,solessh bla@bla
默认分配一个伪终端。这就是你想要的。强制伪终端分配,使用-t
或RequestTTY
.
甚至这个
RequestTTY
选项也没有帮助。
如果只是远程命令,那对你没有帮助ls
。你需要ls; bash
或类似的。
看来当您请求 tty 时,您没有请求bash
。当您bash
在 之后请求时ls
,您没有请求 tty。你需要两者:
ssh -t bla@bla "ls; bash"
注意ls
还将使用伪终端。请阅读“更广泛的图片”部分我的这个答案了解其中的区别(尤其是“有一个怪癖”的地方)。
答案2
要摆脱 me@machine,您需要设置 PS1 环境变量。尝试:
ssh bla@bla "PS1=\"\"; ls; bash"