🚀

【備忘録】踏み台sshサーバーを使うための設定

2024/02/26に公開

踏み台サーバーとは

目的のサーバーにアクセスするときに一旦経由するサーバー
英語では Bastion(要塞) server と言うらしい

メリット

  • サーバーを外部に公開していなくてもssh接続できる
  • セキュリティ強化

構成

ネットワークの構成

ノートパソコンから、グローバルIPを持った踏み台サーバー example.com を経由して対象のサーバーにsshしたい

この記事では、

  • 接続元のノートパソコン → laptop
  • 踏み台サーバー → bastion
  • 対象のサーバー → target

と表す

設定

.ssh/configの設定

sshするたびにユーザー名や鍵ファイル、ポートなどをオプションで渡すのは大変
~/.ssh/config にsshクライアントの設定を書ける

現段階では、サーバー側の /etc/ssh/sshd_configPasswordAuthentication yes となっているものとする(認証方法がパスワードになっている状態)
↑このあとサーバーに公開鍵を送信するときにssh接続を使うので必須

laptop ~/.ssh/config
# 踏み台サーバーの設定
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できるようになる

鍵の生成

接続元のノートパソコンで、

  1. 踏み台サーバー接続用の鍵ペア
  2. 対象のサーバー接続用の鍵ペア

を作成する。

ssh-keygen コマンドで鍵ペアを生成する

オプション 説明
-t 鍵の方式 ed25519推奨
-f 鍵のファイル名を指定
laptop
# 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_bastionid_target は秘密鍵、
id_bastion.pubid_target.pub が公開鍵です。

名前どおり、秘密鍵は秘密にしておく必要があるので、絶対に送信したりしてはいけない
(自分のPC内に保管しておく)

公開鍵はサーバーに登録(コピー)する

公開鍵の登録

作成した公開鍵をサーバーに送信する
現段階で両サーバーにsshできることが前提

laptop
# 踏み台サーバーに公開鍵を送信
ssh-copy-id -i ~/.ssh/id_bastion.pub bastion

# 対象のサーバーに公開鍵を送信
# configで設定した通り踏み台サーバーを経由して送信される
ssh-copy-id -i ~/.ssh/id_target.pub target

サーバー側で公開鍵認証を設定

踏み台サーバー、対象のサーバーにそれぞれ接続し、/etc/ssh/sshd_config を編集して認証方法を公開鍵暗号に設定する
これによりパスワードのみでのssh接続はできなくなるので公開鍵をサーバーにコピーできていることをしっかり確認してから行う

両サーバー /etc/ssh/sshd_config
# コメントアウト
PubkeyAuthentication yes

# noに変更
PasswordAuthentication no

sudo systemctl restart sshd で 設定を反映させる

~/.ssh/config で公開鍵を設定

鍵生成の前に編集した ~/.ssh/config を再び編集して公開鍵認証で接続できるようにする

laptop ~/.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