server1
2つのサーバーがあり、以下を介して接続server2
できます。server2
server1
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
ローカルデバイスをどのように設定しますか?server2
server1
server1
すべてのコンピュータは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@server1
ssh 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