Command-Line

SSH 內的 SSH 失敗並顯示“stdin: is not a tty”

  • August 6, 2021

我正在嘗試使用 ssh 連接到機器一,然後使用 ssh 連接到另一台機器,但是我收到此錯誤。

ssh user@computerone.com 'ssh otheruser@computertwo.com'

stdin: is not a tty

為什麼?

預設情況下,當您使用 ssh 在遠端電腦上執行命令時,不會為遠端會話分配TTY 。這使您可以傳輸二進制數據等,而無需處理 TTY 怪癖。這是為在 上執行的命令提供的環境computerone

但是,當您在沒有遠端命令的情況下執行 ssh 時,它會分配一個 TTY,因為您可能正在執行一個 shell 會話。這是該ssh otheruser@computertwo.com命令所期望的,但由於前面的解釋,該命令沒有可用的 TTY。

如果您想要一個 shell on computertwo,請改用它,這將在遠端執行期間強制 TTY 分配:

ssh -t user@computerone.com 'ssh otheruser@computertwo.com'

當您最終在 ssh 鏈的末端執行 shell 或其他互動式程序時,這通常是合適的。如果您要傳輸數據,那麼 add 既不合適也不需要-t,但是每個 ssh 命令都將包含一個數據生成或消耗命令,例如:

ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'

引用自:https://unix.stackexchange.com/questions/48527