web-dev-qa-db-ja.com

リモートコマンド実行時のSSHエラー:「stdin:is not tty」

Sshでマシン1に接続してから、sshで別のマシン2に接続しようとしています。しかし、このエラーが発生します:

ssh [email protected] 'ssh [email protected]'

stdin: is not a tty
24
Jhonathan

シェルにログインするとき、リモートホストは接続が人間のユーザーによって行われたと想定します。したがって、クライアントのstandard inを制御できると期待するのは合理的です。つまり、ユーザーはキーボードを介して端末で入力を行っています。リモートホストが、ユーザーが人間ではないことを検出した場合(入力は端末ではなく、ttyであるが別のプロセスであるため)、この予期しない状態についてユーザーに警告する場合があります。


議論された不正行為とその回避方法のデモ(man sshそして、より完全な説明については-tを探してください。

$ ssh -t genja.org 'ssh raptor.lan hostname\; uptime'
Host: genja.lan 
raptor
 21:17:27 up 3 days, 15 min,  1 user,  load average: 0.00, 0.00, 0.00
Connection to genja.org closed.

$ ssh genja.org uptime 
Host: genja.lan 
 21:17:43 up 12 days, 17:40,  1 user,  load average: 0.30, 0.08, 0.02

...そしてエラー:

$ ssh  genja.org 'ssh raptor.lan hostname\; uptime'
Host: genja.lan 
Permission denied (publickey,keyboard-interactive).

代わりにトンネルを作成することもできます。

ssh -L 4444:raptor.lan:22 genja.org

次に、別の端末で:

ssh -p 4444 localhost will give you a conenction straight to "raptor.lan"

DNSエイリアスがリモートエンドで設定されていない場合は、192.168.0.11などのIPアドレスを使用します。