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
's?駄目だ。
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
の使用を推奨しています。
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と連携して機能します。
(10月22日に更新し、バックグラウンドの猫をクリーンアップするためのkillを含める)(2011年3月3日に更新して、プレースホルダーをより明確にし、/ dev/tcpを説明します)
ローランドシュルツの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/
[〜#〜] update [〜#〜]:これは Marco からの新しいものです
〜/ .ssh/configのProxyCommandを参照すると、次のような行があります。
ProxyCommand ssh gateway nc localhost %p
マルコさんのコメント:
OpenSSHの最新バージョンを使用している場合は、netcatは必要ありません。 nc localhost%pを-W localhost:%pに置き換えることができます。
結果は次のようになります。
ProxyCommand ssh gateway -W localhost:%p
大きな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_key
other_systemでこれを実行してコマンドを実行します。
from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ...
これを試してみてください:
ProxyCommand ssh -A -t gateway ssh -t steve@targetip