ssh構成ファイルの設定を修正して、3番目のマシンにトンネルします


18

ブリッジサーバー経由でサーバーにトンネルしようとしています。これまでのところ、次のコマンドを使用して、コマンドシェルから適切に機能させることができました。

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

しかし、私はこれを自分の~/.ssh/configファイルにラップしようとしていますが、問題があります。私はもう試した:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

しかし、そうすると、次のエラーメッセージが表示されremoteserver.com、何が原因なのかわかりません。

ksh:SSH-2.0-OpenSSH_6.8 ^ M:見つかりません

私がログインするときremoteserver.com、私のシェルがあることを知っています/usr/bin/ksh

configファイルのsshコマンドにパス引数を追加しようとしましたが、違いはありませんでした。

どんなアイデアがありますか?


それProxyCommandは、使用方法を意図したものではありません。通常、sshが出力をパイピングし、netcatがリモートサーバー SSHポートへのトンネルとして機能するnetcatで使用されます。このssh -W %h:%p bridge_userid@bridgemachine.com機能を使用する場合は、ProxyCommandが必要です。
DanSut

残念ながら私のブリッジサーバーにはnetcatがインストールされていないため、これを他の方法で動作させようとしています。コマンドラインから機能するかどうかを考えました。設定ファイルに情報を入れる方法があるはずです。
エリックB.

ssh -A remote_userid@remoteserver.comブリッジマシンで実行するコマンドとして提供しているコマンドラインの使用法では、configはデフォルトのコマンドを提供する方法を提供しません。workssshはそれ自体で何をしようとしますが、sshがProxyCommandトンネルとして使用しようとし、ssh プロトコルがSSHプロトコルをリッスンするのではなく、反対側で待機しているシェルでSSHプロトコルを起動します。
DanSut

@dansutは素晴らしかった。THX!
エリックB.

回答:


23

Jakujeの答えは正しいですが、OpenSSH以来7.3-J ProxyJumpどちらがより簡単に使用できるようになりました。私のメモを参照してください:

OpenSSH 7.3以降

を使用しProxyJumpます。マニュアルで説明されているように:

-J [user @] host [:port]
最初にジャンプホストへのssh接続を確立し、次にそこから最終的な宛先へのTCP転送を確立することにより、ターゲットホストに接続します。複数のジャンプホップをカンマ文字で区切って指定できます。これは、ProxyJump構成ディレクティブを指定するショートカットです。

ProxyJumpの~/.ssh/config

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

と接続する

ssh server2_behind_server1 -v

-v詳細出力用に追加

ProxyJump -Jコマンドラインの例

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

と接続する

ssh server2 -J server1 -v

または使用する -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4以降

使用ProxyCommandする-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

と接続する

ssh server2 -v

または使用する -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

OpenSSHベローズ 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

と接続する:

ssh server2 -v

または使用する -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

ソース

-JOpenSSH 7.3で追加

  • ssh(1):ProxyJumpオプションと対応する-Jコマンドラインフラグを追加して、1つ以上のSSHバストションまたは「ジャンプホスト」を介した単純化された間接化を可能にします。

-WOpenSSH 5.4で追加

  • ssh(1)に「netcatモード」を追加しました: "ssh -W host:port ..."これにより、クライアントのstdioがサーバーの単一ポート転送に接続されます。これにより、たとえば、sshをProxyCommandとして使用して、中間サーバー経由で接続をルーティングできます。bz#1618

3

あなたのnetcat橋の上に必要はありません。DanSutがコメントで提案したようssh -Wに、代わりにコマンドラインオプションを使用することができます。この設定はあなたのために働くはずです:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

動いた。ありがとう。理由は定かではありませんが、すでに失敗していたことが一度ありましたが、成功してもう一度試しました。ありがとう。
エリックB.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.