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


14

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ます。


netcatが必要であるという結論はありますか?
MountainX-for-Monica

そのように見える。この例では、インストールして問題を解決することができましたが、必ずしもそんな贅沢があるわけではありません。
スティーブベネット

netcatなしでこれを行うことができた2つの方法については、以下の回答を参照してください。
MountainX-for-Monica

回答:


13

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日に更新)(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 /

更新マルコからの新しいものがあります

〜/ .ssh / configのProxyCommandを参照する場合、次のような行があります。

ProxyCommand ssh gateway nc localhost %p

マルコ:

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

結果は次のようになります。

ProxyCommand ssh gateway -W localhost:%p

8

ビッグ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

待って、私が試したものとどう違うの?
スティーブベネット

@SteveBennett違いは、これが2番目のシステムだけでなく最初のシステムにもTTYを割り当てようとすることです。
ハウケレイジング

「面白いが役に立たない」結果で私が言及したコマンドとまったく同じですか?
スティーブベネット

@SteveBennett確かにそれを読み間違えました。私の目的は-t両方の接続にあることであり、間違った接続でそれを見ました。回答を編集しました。
ハウケレイジング

あ。まあ、まだダメです。すべての組み合わせを試しました。
スティーブベネット

-3

server1にssh'ingしてからserver2にssh'ingする次の手法を試すことができます。

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

これが私にとってうまくいくようにそれを行う。


1
さらに説明してください...このコマンドの機能と、答えを解決するのにどのように役立つか。
テハス14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.