Alex J Asked: 2009-05-30 02:03:16 +0800 CST2009-05-30 02:03:16 +0800 CST 2009-05-30 02:03:16 +0800 CST 什么时候 ssh -t 不适合代替 ssh? 772 使用ssh -t而不是ssh连接到远程服务器有几个优点。例如,我可以直接使用 vim: 编辑文件,ssh -t host vim foo.txt否则会失败。 在使用 ssh 时,在任何情况下分配(伪)-tty 会是一件坏事吗? linux unix ssh 4 个回答 Voted Best Answer niXar 2009-05-30T02:57:43+08:002009-05-30T02:57:43+08:00 在管道输入或获取输入时,这是“ssh 主机命令”的典型用法。控制字符可以由 TTY 层解释(例如,^S) Xerxes 2009-05-30T02:55:57+08:002009-05-30T02:55:57+08:00 是的,有时您想建立一个静默的后台连接,例如在设置隧道时(例如 SOCKS 代理)。在此类示例中,您希望进程没有 tty。 这是设置从本地主机到某个远程主机的端口转发的示例... ssh -l username -fNTL 8073:server:873 设置完成后,您可以 rsync 到 localhost,而不是到远程主机,因此有效地通过ssh... rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/ server如果 rsync 出去到被阻止,你会这样做,但ssh没有。 TomOnTime 2009-05-30T05:33:28+08:002009-05-30T05:33:28+08:00 除了以上... (1) 不同的 tilda 逃逸处理: “~” 如果您有 pty (-t),escape 将断开您的连接。对于长时间运行的命令,您可能希望防止有人在键入 ~ 时意外停止该进程。 $ ssh hostname.tomontime.com -t sleep 60 [键入 ~. 它断开连接] 与 hostname.tomontime.com 的连接已关闭。 $ ssh hostname -T sleep 60 [我输入~。并将其视为正常的击键,睡眠命令会忽略它。] ~。 ~。 用 CTRL-C 试试同样的方法。您会看到使用 -t 将 CTRL-C 发送到“睡眠”。使用 -T 您将 CTRL-C 发送到您机器上运行的 ssh 程序。有时这会有所不同(即程序处理 INT 与 HUP 不同) (2) 您只想最小化 pty 或网络连接活动。 当尝试重新启动没有 pty 的机器时,您不想鼓励系统尝试分配 pty!这也最大限度地减少了必须关闭的网络连接(延迟重新启动)。 这将更快,更可靠地工作: ssh -T hostname reboot 这可能有问题: ssh -t hostname reboot ericslaw 2009-05-30T05:56:02+08:002009-05-30T05:56:02+08:00 ssh -t 在远程机器上创建一个伪终端。如果您通过多个服务器链接 ssh 命令并希望在远端有一个真正的终端(例如,您可以使用“vi”),这很有用。 如果有终端,当登录脚本的行为不同时,您可能不想要“-t”。恕我直言,这是不好的做法,但我见过登录脚本在 1) 设置提示和 2) 将路径扩展到许多交互式应用程序之前检查 TTY 的情况。 在另一个例子中(上面的 TomOnTime 提到),我实际上遇到了所有 TTY (ptys) 都用完的情况。显然是错误配置,但无需为一堆隧道和 rsync 消耗资源。
在管道输入或获取输入时,这是“ssh 主机命令”的典型用法。控制字符可以由 TTY 层解释(例如,^S)
是的,有时您想建立一个静默的后台连接,例如在设置隧道时(例如 SOCKS 代理)。在此类示例中,您希望进程没有 tty。
这是设置从本地主机到某个远程主机的端口转发的示例...
设置完成后,您可以 rsync 到 localhost,而不是到远程主机,因此有效地通过
ssh
...server
如果 rsync 出去到被阻止,你会这样做,但ssh
没有。除了以上...
(1) 不同的 tilda 逃逸处理:
“~” 如果您有 pty (-t),escape 将断开您的连接。对于长时间运行的命令,您可能希望防止有人在键入 ~ 时意外停止该进程。
$ ssh hostname.tomontime.com -t sleep 60
[键入 ~. 它断开连接]
与 hostname.tomontime.com 的连接已关闭。
$ ssh hostname -T sleep 60
[我输入~。并将其视为正常的击键,睡眠命令会忽略它。]
~。
~。
用 CTRL-C 试试同样的方法。您会看到使用 -t 将 CTRL-C 发送到“睡眠”。使用 -T 您将 CTRL-C 发送到您机器上运行的 ssh 程序。有时这会有所不同(即程序处理 INT 与 HUP 不同)
(2) 您只想最小化 pty 或网络连接活动。
当尝试重新启动没有 pty 的机器时,您不想鼓励系统尝试分配 pty!这也最大限度地减少了必须关闭的网络连接(延迟重新启动)。
这将更快,更可靠地工作:
ssh -T hostname reboot
这可能有问题:
ssh -t hostname reboot
ssh -t 在远程机器上创建一个伪终端。如果您通过多个服务器链接 ssh 命令并希望在远端有一个真正的终端(例如,您可以使用“vi”),这很有用。
如果有终端,当登录脚本的行为不同时,您可能不想要“-t”。恕我直言,这是不好的做法,但我见过登录脚本在 1) 设置提示和 2) 将路径扩展到许多交互式应用程序之前检查 TTY 的情况。
在另一个例子中(上面的 TomOnTime 提到),我实际上遇到了所有 TTY (ptys) 都用完的情况。显然是错误配置,但无需为一堆隧道和 rsync 消耗资源。