sshマルチホップ…ssh設定ファイルにコマンドを適合させる


10

マルチホップsshコマンドをssh .ssh / configファイルに入れようとしています。

これは私の接続グラフです:ラップトップ(私はここにいます)------> userver -------> workstation

ssh公開rsa鍵を「userver」と「workstation」に入れました。この時点で、次の行を入力して接続できます。

ssh -A -t userserver@userver ssh -A userworkstation@workstation

ただし、〜/ .ssh / configの設定ファイルの機能を使用して同じ効果を得ることができるようにしたいのですが、1つの単純なコマンドを使用すると、 'scp'で高速コピーを実行できます。唯一の問題は、「userver」に「nc」コマンドがなく、そこにスーパーユーザーがいないことです。ホームフォルダーを制御するだけです。それにもかかわらず、私はいくつかのことを試しました:

私のラップトップにこの設定ファイルがあります(〜/ .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

また、userver内の別の構成ファイル(〜/ .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

この構成ファイルを使用して、次のように接続できます

ssh -A -t userver ssh -A workstation

これは改善ですが、十分ではありません。次のように、ラップトップの構成に別のホストを追加してみました。

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

その後、私がするとき

ssh hop

エラーが発生して次の出力が表示され、接続できません。

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

何か案は?

回答:


6

あなたが必要としているコマンドはProxyCommandです。

.ssh / configファイルに次の行を追加する必要があります。

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

これで、PCワークステーションに接続できます

  ssh worksation

これが明確でない場合、または詳細が必要な場合は、この優れたsshマルチホッピング入門を読むことをお勧めします。

編集:

エイリアスはいつでも定義できます。/home/your_name/.bashrcファイルに次の行を追加します。

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

-Xリモートサーバーでグラフィカルアプリケーションを実行できるようにオプションを挿入しました。ローカルで確認できます。これが必要ない場合は、をドロップしてください-X)。


こんにちはMariusMatutiae、私はあなたの解決策を試しましたが、元の投稿で言ったように、「userver」ノードにはプログラムnetcat(nc)がありません。だから私はこのエラーを受け取ります:sshワークステーションbash:nc:コマンドが見つかりませんssh_exchange_identification:リモートホストによって接続が閉じられました
labotsirc

インストールできませんか?
MariusMatutiae 2013

残念ながら、「userver」にスーパーユーザーがいないため、別の方法を試していました。これが機能しない場合、「ssh -A -t userver ssh -Aワークステーション」のように動作しますが、ProxyCommandに同じものを配置しないのはなぜですか?
labotsirc 2013

1
@labotsirc私の回答を少し修正しました。お役に立てれば幸いです。あるいは、netcatをローカルに(つまり、あなただけのために)インストールして、Proxycommand ...行に独自のnetcatの完全なパスを追加することもできます。権限があるため、これが機能するかどうかはわかりませんが、試すことができます。
MariusMatutiae 2013

私のnetcatバイナリをコピーし、-q0オプションを削除しました。エラーが発生したためです。ありがとう
labotsirc

10

次の解決策ncは、他の例のようにnetcat()を使用するよりもはるかにうまく機能することがわかりました。netcatを使用すると、接続が非常に遅くなり、いくつかのキーを押すまで繰り返しハングします。また、netcatをインストールする必要はありません。

次のものをに追加します~/.ssh/config

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

次に、このようにsshできます:

ssh workstation

また、あなたProxyCommandがうまくいかない理由は、あなたが何をProxyCommandしていないのかということです。 SSL接続を確立できるProxyCommandパイプを作成する必要がありますssh。つまり、コマンドは、ポートに接続するstdinおよびstdoutのプロセスを開始する必要sshがありsshdます。構成では、ポートではなくコマンドシェルにProxyCommand接続するssh接続を作成sshしていsshdます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.