マルチホップ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
何か案は?
必要なコマンドは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
をドロップしてください)。
次の解決策は、他の例のように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およびstdoutssh
をsshd
ポートに接続します。構成では、ProxyCommand
ポートではなくコマンドシェルにssh
を接続するsshd
とssh接続を行っています。