stdin が端末ではないため、疑似端末は割り当てられません。

stdin が端末ではないため、疑似端末は割り当てられません。

NCなしでサーバーを介して自動SSHホッピングを設定しようとしています。

これはコマンドラインから実行できます。

ssh -A gateway ssh steve@target

(SSHエージェントに公開鍵を追加しました。)

ただし、これを ~/.ssh/config に追加すると、次のことは行われません。

Host target
  User steveb
  ProxyCommand ssh -A gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

問題を強制的に解決しようとするのは-t面白いですが、役に立ちません。

ProxyCommand ssh -A -t gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

もっと-t?悪い。

ProxyCommand ssh -A -t -t gateway ssh steve@targetip

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

可能ですか?ほとんどのチュートリアル(例:http://www.arrfab.net/blog/?p=246)をお勧めしますnc

答え1

netcatなしのSSHプロキシコマンド

ProxyCommandは、ホストに間接的にのみアクセスできる場合に便利です。 netcatの場合は比較的進歩的です。

ProxyCommand ssh {gw} netcat -w 1 {host} 22

ここで、{gw} と {host} はゲートウェイとホストのプレースホルダーです。

ただし、ゲートウェイにnetcatがインストールされていない場合でも可能です。

ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'

/dev/tcpは標準bashに組み込まれている機能です。これらのファイルは存在しません。 Bashにこの機能が組み込まれていることを確認するには、次の手順を実行します。

cat < /dev/tcp/google.com/80 

...ゲートウェイで。

Bashを使用していることを確認するには、以下を使用してください。

ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"

ControlMasterでも動作します。

(背景猫をクリーンアップするためにKillを含めるように10月22日に更新)

Roland Schulzに100%クレジットを提供します。ソースは次のとおりです。
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
より有用な情報については、コメントをご覧ください。

詳細は次のとおりです。
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack-4r1ubuntu/

修正する:何か新しいと思います。表示

次の行を含む ~/.ssh/config の ProxyCommand を参照してください。

ProxyCommand ssh gateway nc localhost %p

マルコはこう言いました。

最新バージョンのOpenSSHを使用している場合は、netcatは必要ありません。 nc localhost %p を -W localhost:%p に置き換えることができます。

結果は次のとおりです。

ProxyCommand ssh gateway -W localhost:%p

答え2

小さなTではなく、大きなT。

-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation. 

私のスクリプトはこのメッセージを返しましたが、今はそうではありません。

/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system

authorized_keyother_systemで次のコマンドを実行するために使用します。

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 

答え3

試してみてください:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip

答え4

次のテクニックを試してみてください。まず、SSHを介してserver1に接続し、次にSSHを介してserver2に接続します。

$ ssh -t user1@server1 ssh -t user2@server2 

このようなものが私にとって効果的です。

関連情報