前回は ssh-agent の Agent forwarding の紹介をしました。
-
SSHのForwardAgentでローカルPCの鍵をサーバで使う
前回は macOS の ssh-agent で SSH 鍵のパスフレーズの入力を省略する方法を解説しました。 今回はその ...
続きを見る
前回の記事で man ssh
コマンドの -A
オプションの説明を読んでいたら、踏み台を経由して目的のサーバに SSH するときに便利な -J
オプションと、 ~/.ssh/config
の ProxyJump
という設定があることに気が付きました。さっそく試してみたので備忘録。これまで踏み台を経由するときに使っていた ProxyCommand
の設定はこちらに置き換えられそうです。
設定内容は SSH to remote hosts through a proxy or bastion with ProxyJump | redhot.com と man ssh
コマンドと man ssh_config
を参考にしています。対応しているバージョンは ssh v7.3 からとのことですが、利用できるかどうかはご自身の環境の man ssh
コマンドで確認ができます。
目次
-J オプション
~/.ssh/config
に Host の情報を書きます。
Host bastion1
HostName 192.168.0.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_bastion1
Host bastion2
HostName 192.168.0.11
User centos
IdentityFile ~/.ssh/id_ed25519_bastion2
Host host1
HostName 192.168.0.20
User ec2-user
IdentityFile ~/.ssh/id_ed25519_host1
-J
オプションを設定して、踏み台サーバ(bastion1)を経由して目的のサーバ(host1)に接続ができます。
ssh -J bastion1 host1
踏み台が複数ある場合はカンマで区切ります。
ssh -J bastion1,bastion2 host1
man ssh
コマンドは以下のように書かれています。
-J
man ssh
Connect to the target host by first making a ssh connection to the jump host described by destination and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive. Note that configuration directives supplied on the command-line generally apply to the destination host and not any specified jump hosts. Use ~/.ssh/config to specify configuration for jump hosts.
ProxyJump
さきほどの例では -J
オプションに踏み台サーバを指定しましたが、~/.ssh/config
に ProxyJump の設定をすることで -J
オプションと同じ効果を得ることができます。
Host bastion1
HostName 192.168.0.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_bastion1
Host host1
HostName 192.168.0.20
User ec2-user
IdentityFile ~/.ssh/id_ed25519_host1
ProxyJump bastion1
bastion1 を経由して host1 に接続する場合は以下のコマンドで。
ssh host1
踏み台が複数ある場合は -J
オプションと同じようにカンマで区切ります。
Host bastion1
HostName 192.168.0.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_bastion1
Host bastion2
HostName 192.168.0.11
User centos
IdentityFile ~/.ssh/id_ed25519_bastion2
Host host1
HostName 192.168.0.20
User ec2-user
IdentityFile ~/.ssh/id_ed25519_host1
ProxyJump bastion1,bastion2
man ssh_config
コマンドには以下のように書かれています。
ProxyJump
man ssh_config
Specifies one or more jump proxies as either [user@]host[:port] or an ssh URI. Multiple proxies may be separated by comma characters and will be visited sequentially. Setting this option will cause ssh(1) to connect to the target host by first making a ssh(1) connection to the specified ProxyJump host and then establishing a TCP forwarding to the ultimate target from there. Setting the host to none disables this option entirely.
Note that this option will compete with the ProxyCommand option - whichever is specified first will prevent later instances of the other from taking effect.
Note also that the configuration for the destination host (either supplied via the command-line or the configuration file) is not generally applied to jump hosts. ~/.ssh/config should be used if specific configuration is required for jump hosts.