要测试 ssh,我读到您需要使用类似 ssh -T user@domain.com
的内容:
根据man ssh
:
-T Disable pseudo-terminal allocation.
-t Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote
machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty alloca-
tion, even if ssh has no local tty.
但即使读完这篇文章,我仍然不清楚在测试 SSH 时使用 -T
的目的是什么。
我阅读了伪终端( https://linux.die.net/man/7/pty ),但这似乎没有帮助。
最佳答案
要在 ssh shell 中具有交互式提示,您还需要在服务器端分配 PTY。当您调用 ssh host
时,它会自动完成。
当您在服务器上分配此 PTY 时,您的本地终端和远程终端正在交换一些附加消息(终端控制字符),这些消息为远程 shell 提供有关本地终端大小的信息,远程可以更新你的 window 等等。当您想要传输文件或只是“按原样”传递输出时,这是您真正不想要的。它会改变这一点,你通常会得到其他东西。同样,如果您使用 scp
或仅使用非交互式脚本作为 ssh host my_script
,此操作会自动完成。
到目前为止还不错。你不需要开关。但事情可能并不总是那么简单。
您可能希望将某些交互式 shell 作为命令调用,例如
ssh host/bin/zsh
。这可以工作,但它不会是交互式的。在这种情况下,您需要使用-t
开关使其正常工作:ssh -t host/bin/zsh
。同样的事情也可以有相反的结果。您可能已经设置了服务器,无论您要求什么命令,它都会给您一些输出。在这种情况下,您确实不想用任何终端控制字符搞乱它,然后您可能需要使用 ssh -T host 来避免这种情况。
您也可以将 -T
视为保护服务器资源安全的方式以及“第二道防线”。您可以在服务器配置中禁用 TTY 分配,但是如果...
-T
开关最常见的用例是
ssh -T git@github.com
验证您是否已正确设置 ssh key 以对 github 进行身份验证。
关于ssh - 为什么将 -T 与 ssh 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505339/