什么时候ssh -t代替ssh不合适?


15

使用ssh -t而不是ssh用于与远程服务器的连接具有多个优点。例如,我可以使用vim:直接编辑文件,ssh -t host vim foo.txt否则将失败。

在使用ssh时,在任何情况下分配(伪)-tty都是一件坏事吗?

Answers:


11

当管道输入或取回输入时,这是“ ssh host命令”的典型用法。控制字符可以由TTY层解释(例如,^ S)。


10

是的,有时您想建立一个无声的后台连接,例如在建立隧道时(例如SOCKS代理)。在这样的示例中,您希望过程中没有tty。

这是设置从本地主机到某些远程主机的端口转发的示例...

ssh -l username -fNTL 8073:server:873

设置完之后,您可以将rsync传递到localhost,而不是远程主机,从而有效地通过以下ssh方式建立隧道:

rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/

您可以这样说,如果rsync外向访问server被阻止了,但是ssh没有被阻止。


谢谢,这也是正确的,但我投了另一票,因为这是我忽略的一个更严重的问题。
亚历克斯·J

3

除了以上...

(1)不同的tilda转义处理:

“〜”。如果您有(-t),则转义符将断开您的连接。对于长时间运行的命令,您可能要防止某人在键入〜时意外中止该过程。

$ ssh hostname.tomontime.com -t sleep 60
[type〜。并断开连接]
到hostname.tomontime.com的连接已关闭。

$ ssh主机名-T sleep 60
[我键入〜。并将其视为正常的击键,sleep命令会忽略它。]
〜。
〜。

使用CTRL-C尝试相同的操作。您会看到,使用-t会将CTRL-C发送到“睡眠”状态。使用-T,您可以将CTRL-C发送到计算机上运行的ssh程序。有时可能会有所不同(即程序对INT的处理与对HUP的处理不同)

(2)您只想最小化pty或网络连接活动。

尝试重新启动没有pty的计算机时,您不想鼓励系统尝试分配pty!这也将必须关闭的网络连接减至最少(延迟重新启动)。

这将更快,更可靠地工作:
ssh -T主机名重启

这可能有问题:
ssh -t主机名重新启动


2

ssh -t在远程计算机上创建一个伪终端。如果要通过多个服务器链接ssh命令,并且希望在远端使用真实的终端,则这很有用(例如,可以使用“ vi”)。

如果有终端,则登录脚本的行为有所不同时,您可能不希望使用“ -t”。恕我直言,这是不好的做法,但我看到过一种情况,登录脚本会在1)设置提示和2)将路径扩展到许多交互式应用程序之前检查TTY。

在另一个实例中(上面的TomOnTime提到),我实际上遇到了所有TTY(pty)都用完的情况。显然是错误的配置,但是不需要为一堆隧道和rsync消耗资源。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.