什么时候ssh -t不适合而不是ssh?

使用ssh -t而不是ssh连接远程服务器有几个好处。 例如,我可以用vim直接编辑一个文件: ssh -t host vim foo.txt ,否则会失败。

在使用ssh的时候,有没有什么情况下分配一个(伪)-tty是一件坏事?

当pipe道input或获取input,这是“ssh主机命令”的典型用法。 控制字符可以被TTY层解释(例如,^ S)

是的,有时你想build立一个无声的,背景的连接,例如在build立隧道(例如SOCKS代理)时。 在这样的例子中,你希望进程没有tty。

这里是一个设置从本地端口转发到远程主机的例子

 ssh -l username -fNTL 8073:server:873 

在这之后,你可以rsync到localhost,而不是远程主机,因此,有效地通过ssh隧道你的rsync …

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

你会这样做,如果rsync出去server被阻止,但ssh不是。

除了上面的…

(1)不同的蒂尔达逃生处理:

“〜” 如果你有一个pty(-t),逃脱将会断开你的连接。 对于长时间运行的命令,如果input〜,则可能需要防止某人意外停止进程。

$ ssh hostname.tomontime.com -t sleep 60
[type〜。 和它断开]
连接到hostname.tomontime.comclosures。

$ ssh主机名-T睡眠60
[我input〜。 并将其视为正常的按键,而sleep命令会忽略这些按键。]
〜。
〜。

用CTRL-C试试同样的事情。 你会看到,你正在发送CTRL-C到“睡眠”。 使用-T你正在发送CTRL-C到你的机器上运行的ssh程序。 有时这可能会有所不同(即程序处理的INT与HUP不同)

(2)你只是想尽量减lesspty或networking连接的活动。

当试图重新启动一台超出ptys的机器时,你不想鼓励系统尝试分配一个pty! 这也最大限度地减less了必须closures的networking连接(延迟重启)。

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

这可能有问题:
ssh -t hostname reboot

ssh -t在远程机器上创build一个伪terminal。 如果您通过多个服务器链接ssh命令并希望在远端使用真正的terminal(例如,可以使用“vi”),这将非常有用。

如果terminal有login脚本,则可能不需要“-t”。 这是不好的做法恕我直言,但我已经看到的情况下,1)设置提示之前login脚本检查TTY和2)扩展到许多交互式应用程序的path。

在另一个例子(上面提到的TomOnTime)中,我遇到了所有TTY(ptys)都用完的情况。 显然是一个错误的configuration,但不需要咀嚼一堆隧道和rsyncs的资源。