web-dev-qa-db-ja.com

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 '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の使用を推奨しています。

14
Steve Bennett

NetcatなしのSSH ProxyCommand

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
13
MountainX

大きな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 ... 
8
user46083

これを試してみてください:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip
3
Hauke Laging