使用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的资源。