ssh - 为什么将 -T 与 ssh 一起使用

标签 ssh terminal pty

要测试 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/

相关文章:

linux - bash 脚本与 SSH 控制台不同

ubuntu - Ubuntu 14.04 的 Cisco SSH key 交换失败(客户端 DH key 范围不匹配)

linux - 主从的目的和 fork 过程

linux - 如何在文本文件中包含带有模式的字符串的行的末尾添加文本?

java - 在 Linux 中使用 echo 使用 Runtime.exec 创建文件?

linux - 终端控制功能设置波特率对伪终端真的有效吗?

python - 运行命令并像在终端中一样近乎实时地分别获取其标准输出、标准错误

linux - 使用 powershell 将 Linux shell 脚本文件从 Windows 插入到 Linux box

git - YOCTO: "error: cannot run ssh: No such file or directory"

linux - sed 命令 - 从 HTML 标记之间的文本中删除所有逗号