【備忘録】踏み台sshサーバーを使うための設定
踏み台サーバーとは
目的のサーバーにアクセスするときに一旦経由するサーバー
英語では Bastion(要塞) server と言うらしい
メリット
- サーバーを外部に公開していなくてもssh接続できる
- セキュリティ強化
構成
ノートパソコンから、グローバルIPを持った踏み台サーバー example.com を経由して対象のサーバーにsshしたい
この記事では、
- 接続元のノートパソコン → laptop
- 踏み台サーバー → bastion
- 対象のサーバー → target
と表す
設定
.ssh/configの設定
sshするたびにユーザー名や鍵ファイル、ポートなどをオプションで渡すのは大変
~/.ssh/config
にsshクライアントの設定を書ける
現段階では、サーバー側の /etc/ssh/sshd_config
で PasswordAuthentication yes
となっているものとする(認証方法がパスワードになっている状態)
↑このあとサーバーに公開鍵を送信するときにssh接続を使うので必須
# 踏み台サーバーの設定
Host bastion
HostName example.com (またはグローバルIP)
User username
Port 22
# 対象のサーバーの設定
Host target
HostName 192.168.1.10
User username
Port 22
ProxyJump bastion # 踏み台サーバーの指定
これで、ssh bastion
で踏み台サーバーに、ssh target
で対象のサーバーにsshできるようになる
鍵の生成
接続元のノートパソコンで、
- 踏み台サーバー接続用の鍵ペア
- 対象のサーバー接続用の鍵ペア
を作成する。
ssh-keygen
コマンドで鍵ペアを生成する
オプション | 説明 |
---|---|
-t |
鍵の方式 ed25519推奨 |
-f |
鍵のファイル名を指定 |
# ed25519アルゴリズムを使用して踏み台サーバー用の鍵を生成
# ~/.ssh 内に id_bastion と id_bastion.pub が生成される
ssh-keygen -t ed25519 -f ~/.ssh/id_bastion
# 対象のサーバー用の鍵を生成
ssh-keygen -t ed25519 -f ~/.ssh/id_target
~/.ssh ディレクトリに生成された id_bastion
、id_target
は秘密鍵、
id_bastion.pub
、id_target.pub
が公開鍵です。
名前どおり、秘密鍵は秘密にしておく必要があるので、絶対に送信したりしてはいけない
(自分のPC内に保管しておく)
公開鍵はサーバーに登録(コピー)する
公開鍵の登録
作成した公開鍵をサーバーに送信する
現段階で両サーバーにsshできることが前提
# 踏み台サーバーに公開鍵を送信
ssh-copy-id -i ~/.ssh/id_bastion.pub bastion
# 対象のサーバーに公開鍵を送信
# configで設定した通り踏み台サーバーを経由して送信される
ssh-copy-id -i ~/.ssh/id_target.pub target
サーバー側で公開鍵認証を設定
踏み台サーバー、対象のサーバーにそれぞれ接続し、/etc/ssh/sshd_config
を編集して認証方法を公開鍵暗号に設定する
これによりパスワードのみでのssh接続はできなくなるので公開鍵をサーバーにコピーできていることをしっかり確認してから行う
# コメントアウト
PubkeyAuthentication yes
# noに変更
PasswordAuthentication no
sudo systemctl restart sshd
で 設定を反映させる
~/.ssh/config で公開鍵を設定
鍵生成の前に編集した ~/.ssh/config
を再び編集して公開鍵認証で接続できるようにする
# 踏み台サーバーの設定
Host bastion
HostName example.com (またはグローバルIP)
User username
Port 22
+ IdentityFile ~/.ssh/id_bastion
# 対象のサーバーの設定
Host target
HostName 192.168.1.10
User username
Port 22
+ IdentityFile ~/.ssh/id_target
ProxyJump bastion # 踏み台サーバーの指定
完成!
ssh target
で対象サーバーへ踏み台サーバーを経由してssh接続できる
Discussion