man ssh
说:
-t 强制分配伪 tty。这可用于在远程计算机上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个 -t 选项强制分配 tty,即使 ssh 没有本地 tty。
https://explainshell.com/explain?cmd=ssh+-tt
多个 -t 选项强制分配 tty,即使 ssh 没有本地 tty。
这具体是什么意思?如果系统上没有 shell,ssh 会自己创建吗?-tt 失败时会发生什么?
答案1
如果你这样做:
ssh -t user@server<<EOT
echo test
EOT
您将收到一条消息,指出:Pseudo-terminal will not be allocated because stdin is not a terminal.
在这种情况下,stdin 正在提供 ssh,而不是您的本地 shell/tty。
使用-tt
将告诉它无论如何都要分配。这是一个用例,我相信还有其他可以应用于此的情况,但 stdin 是最明显的一种。
如果系统上没有 shell,ssh 会创建自己的 shell 吗?
ssh 没有本地 tty 并不表示本地 shell 不存在。上面的示例显示了使用 stdin 流入 ssh。
这具体是什么意思呢?
这意味着它将强制分配 tty,而不管本地连接如何。参见上面的例子。