web-dev-qa-db-ja.com

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

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

これは私の接続グラフです:ラップトップ(私はここにいます)------> userver ------->ワークステーション

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

何か案は?

10
labotsirc

必要なコマンドは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をドロップしてください)。

6
MariusMatutiae

次の解決策は、他の例のようにnetcat(nc)を使用するよりもはるかにうまく機能することがわかりました。 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が機能するものを取得していないためです。 ProxyCommandは、sshがSSL接続を確立できるパイプを作成する必要があります。つまり、コマンドはプロセスを開始する必要があります。whosstdinおよびstdoutsshsshdポートに接続します。構成では、ProxyCommandポートではなくコマンドシェルにsshを接続するsshdとssh接続を行っています。

10
jcoffland