如何在 ssh 连接后运行命令而不断开连接?

如何在 ssh 连接后运行命令而不断开连接?

我想通过 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默认分配一个伪终端。这就是你想要的。强制伪终端分配,使用-tRequestTTY.

甚至这个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"

相关内容