server1の資格情報を使用してserver1を介してserver2にSSHを接続する

server1の資格情報を使用してserver1を介してserver2にSSHを接続する

server12つのサーバーがあり、以下を介して接続server2できます。server2server1

localUser@localMachine $ ssh user1@server1
user1@server1 $ ssh user2@server2
user2@server2 $

次の手順を使用して、1 つの手順でこれを実行できます。

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

ssh server2自分のローカルコンピュータで簡単に実行して直接接続できるようにしたいです。上記のコマンドをエイリアスに設定することもできますが、viaを好みます~/.ssh/config。問題は、server2に接続するときにserver1のSSH資格情報を使用する必要があります。これを自分のローカルコンピュータにコピーしたくないことです。これは、この機能を設定する「一般的な」方法(ローカルに次を追加する~/.ssh/config)が失敗することを意味します。

Host server1
    Hostname  server1.example.com
    User      user1

Host server2
    Hostname  server2.example.com
    User      user2
    ProxyJump server1

今すぐ接続しようとすると、次の結果が表示されます。

$ ssh server2
[email protected]: Permission denied (publickey).

~/.ssh/id_rsa_pubこれは、ローカルコンピュータではなくローカルコンピュータのキーを使用する必要があるためですserver1。それでは、存在する資格情報を使用してローカルデバイスを通過して接続するように~/.ssh/configローカルデバイスをどのように設定しますか?server2server1server1

すべてのコンピュータはLinuxコンピュータで、リモートコンピュータはUbuntu Server 18.04.4を実行しており、私のローカルコンピュータはArch Linuxを実行しています。


私はHaukeの答えに提供されている解決策を試して、以下を追加しました~/.ssh/config

Host server1server2
    Hostname server1
    User     user1
    RemoteCommand ssh [email protected]

これほぼ働く!これserver2で接続できますが、ssh server1server2プロンプトは表示されません。

localUser@localMachine $ ssh server1server2 
Pseudo-terminal will not be allocated because stdin is not a terminal.

hostname
server2

上記のように、そこに接続していてserver2そこからコマンドを実行することもできますが、プロンプトは表示されません。次に、設定ファイル-t -tにコマンドを追加してみました。ssh

Host server1server2
    Hostname server1
    User     user1
    RemoteCommand ssh -t -t [email protected]

これは私にヒントを与えますが、シェルの初期化ファイルを読み取ることができず、Ctrl+を押すと接続がC失われます。 server1で実行する操作とまったく同じようにssh機能する必要があります。これは、通常のシェル初期化ファイルを読み取る必要があり、Ctrl + Cはセッションを終了しないことを意味します。ssh user2@server1ssh user2@server2

答え1

SSH 構成を通じてターゲットでコマンドを実行するには、少なくとも 2 つの可能性があります。

  • リモートコマンド
  • 単一の公開鍵command="command"

だから

Host server1server2
    Hostname server1
    RemoteCommand ssh user2@server2

または

Host server1server2
    Hostname server1
    IdentityFile ~/.ssh/id_ecdsa_force_command

それからssh server1server2

答え2

@αГsнιеが私に指摘した。https://serverfault.com/q/337274/155817コメントでは、それに基づいてローカルファイルで次の行を使用して動作します~/.ssh/config

Host server2
    Hostname server2.example.com
    User user2
    ProxyCommand ssh -o 'ForwardAgent yes' server1  'ssh-add && nc %h %p'

これで、次のものと直接接続できます。

$ ssh server2
Identity added: /home/user1/.ssh/id_rsa (/home/user1/.ssh/id_rsa)

上記のメッセージは、ssh-addserver1のIDをserver2で実行されている認証ブローカーに追加することによって発生します。しかし、これは問題ではありません。

関連情報