为了测试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),但这似乎没什么帮助。
答案 0 :(得分:4)
要在ssh shell中提供交互式提示,您还需要在服务器端分配PTY。当您致电ssh host
时,它会自动完成。
当你在服务器上分配这个PTY时,你的本地终端和远程终端正在交换一些额外的消息(终端控制字符),它们为远程shell提供有关本地终端大小的信息,远程可以更新标题你的窗户等等。当您想要传输文件或只是“按原样”传递输出时,这是您真正不想要的。它会修改它,你会得到其他东西。同样,如果您使用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密钥以对github进行身份验证。