为什么我需要“-t”来表示“ssh host bash”,但“ssh host”却可以正常运行 bash

为什么我需要“-t”来表示“ssh host bash”,但“ssh host”却可以正常运行 bash

当我这样做时,ssh host它会让我登录host然后运行 ​​bash。但当我ssh host bash这样做时,它就会坐在那里,看似什么也不做。要获得可用的 bash 提示符,我必须提供-t如下内容:ssh -t host bash

实际上它并不只是坐在那里无所事事。当我这样做时ssh host bash(没有-t),似乎我得到了一个有效的bash,但没有提示。我可以执行像echo fooor 这样的命令ps -ef,并将获得可用的输出。只是没有提示。

为什么我需要-t获得ssh host bash可用的 bash 提示符,但ssh hostbash 运行得很好?

答案1

当你跑步时:

ssh host some    command

ssh不请求在远程端使用伪 tty 设备。 stdout 和 stderr 或远程命令是管道。sshd运行:

exec("remote-user-login-shell", ["remote-user-login-shell", "-c", "some command"])

这就是rsh模式。当您不指定命令时,它会进入该rlogin模式,在该模式下启动伪终端,并运行登录交互式 shell 会话,在该会话中运行:

exec("remote-user-login-shell", ["-remote-user-login-shell"])

-在 中加一个前导argv[0]告诉 shell 它将充当登录 shell)。

-t当您需要以交互方式运行特定命令(例如bashvi)时,您需要sshd在远程主机上创建一个伪终端来与远程命令交互。如果没有,你就这样做不是想要使用-t

在:

ssh host bash

bash不执行任何操作,只是不具有交互性。它将以与处理脚本相同的方式处理输入,或者就像您通过运行cat | bash.您仍然可以输入命令并查看其输出。

从历史上看,rsh(替换的)在没有给出任何运行命令时ssh实际上正在运行,并且从该服务调用不同的服务(在不同的 TCP 端口上)。rloginrloginrsh

相关内容