マルチホップSSHトンネルでssh-copy-idを使用する方法は?

マルチホップSSHトンネルでssh-copy-idを使用する方法は?

~/.ssh/id_rsa.pub私のローカルコンピュータ上のファイルの公開SSHキーを2つの~/.ssh/authorized_keysSSHホップから離れたリモートホストのファイルにコピーしたいと思います。つまり、localhostsshだけがアクセス可能host1ですが、host1sshはアクセス可能ですhost2。私の公開SSHキーをlocalhostからにコピーしたいと思いますhost2

SSH キーを 1 ホップ離れたリモートホストにコピーするには、SSHドキュメント次のコマンドを実行します。

ssh-copy-id -i ~/.ssh/mykey user@host

単一のコマンドで2ホップ離れたコンピュータにキーをコピーする方法はありますか?

答え1

withオプションsshに任意のオプションを渡すことができます。このオプションを使用すると、ホストをジャンプしてキーをホストにコピーできます。ssh-copy-id-oProxyJumpssh-copy-id

以下は、ジャンプホストJump.spack.orgを介してsshキーをleia.spack.orgにコピーする例です。

$ ssh-copy-id -o ProxyJump=jump.spack.org leia.spack.org
[email protected]'s password:

Number of key(s) added:        1

次に、次のようにテストします。

$ ssh -J jump.spack.org leia.spack.org
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-42-generic x86_64)

答え2

ssh-copy-idではダブルホップができないと思います。 scp を使用して、あるサーバーから 3 番目のサーバーにファイルを移動できます。男scpを見てください。ただし、Authorized_keysにテキストを配置して権限を設定するには、まだいくつかのことを行う必要があります。

しかし!

SSHを使用すると、あるサーバーから別のサーバーに移動し、そこからコマンドを実行できます。

このようなものはキーをここからそこにコピーします。送信する .ssh/id_rsa.pub キーを下の mysupersecretkeyfromhell の場所にコピーして貼り付け、名前と IP アドレスを明確に変更する必要があります。
これは最初のサーバーをスキップし、2番目のサーバーとしてSSHを介してコマンドを実行することです。

ssh -J [email protected] [email protected] echo mySupersecretKeyfromehell >> .ssh/authorized_keys && chmod 700 .ssh && chmod 600 .ssh/authorized_keys

これは、最新バージョンのSSHを実行していると仮定します。

キーを変数に入れて最後のコマンドを短くすることもできます。
下のバックティックは一重引用符ではないことに注意してください!

MYKEYVAR="echo `cat .ssh/id_rsa.pub`" 
ssh -J [email protected] [email protected] echo $MYKEYVAR >> .ssh/authorized_keys && chmod 700 .ssh && chmod 600 .ssh/authorized_keys

関連情報