ssh 客户端选项“-T”是禁用伪终端分配。
如果我打开此选项,远程 sshd 将不会分配 pty 来运行远程命令。远程命令的输出如何传输回ssh客户端?据我所知,ssh客户端和服务器之间的简单输入/输出是:
ssh client <--- (TCP/IP) --> ssh server <---> ptm <---> pts <---> remote command
使用选项-T,是否意味着sshd不会创建pty对来运行远程命令?
答案1
如果使用 关闭 pty 分配-T
,sshd 将使用一对管道而不是双向 pty 与运行远程命令的进程进行通信。
你可以看看do_exec_no_pty()
OpenSSH 源代码中的函数(如果没有在任何地方记录)。dropbear
(另一个 sshd 实现)正在做类似的事情。
在 pty 的情况下是已分配(-t
选项或未指定远程命令),仅在远程计算机上分配一个 pty;客户端 ssh 不会在本地计算机上分配 pty;如果这是一个 tty,它只会在其标准输入上打开原始模式。