UbuntuのSSH設定ファイル(~/.ssh/config)の書き方と活用法

コマンド

Ubuntuで毎回 ssh -i ~/.ssh/id_ed25519 -p 2222 ubuntu@203.0.113.10 と長いコマンドを打っていませんか?~/.ssh/config を使えば、ssh myserver の5文字だけで接続できるようになります。

この記事では、Ubuntu 24.04 LTS の Docker 公式イメージ(ubuntu:24.04)を使い、~/.ssh/config の書き方と ssh -G コマンドによる設定確認を実際に動かした結果を載せています。1台のサーバーへの接続設定から、GitHub の複数アカウント切り替え、踏み台サーバー経由の ProxyJump まで順を追って説明します。

この記事のポイント

  • ~/.ssh/config にホスト設定を書けば ssh エイリアス名 だけで接続できる
  • Ubuntu 24.04(Noble)では OpenSSH_9.6p1(1:9.6p1-3ubuntu13.16)がインストールされます(実測)
  • ~/.ssh/ は 700、config ファイルは 600 のパーミッションが必須。644 にすると「Bad owner or permissions」エラーが出る(実証済み)
  • ssh -G ホスト名 で設定が正しく読み込まれているかをすぐ確認できる
  • GitHubの個人・会社アカウントも Host エイリアスで簡単に切り替えられる

注意

本記事のコマンドは Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04)で検証しています。Ubuntu 22.04 との比較も含みますが、バージョンが異なると挙動が変わる場合があります。

~/.ssh/config とは何か

~/.ssh/config は、OpenSSH クライアントの接続設定をまとめておくファイルです。ホスト名・ユーザー名・ポート番号・使用する秘密鍵などを事前に定義しておくことで、ssh コマンドの入力を大幅に短縮できます。

設定ファイルは2種類あります。

  • ~/.ssh/config:ユーザーごとの設定。通常はこちらを編集します
  • /etc/ssh/ssh_config:システム全体の設定(全ユーザーに適用)

優先順位はユーザー設定 → システム設定の順です。同じオプションが両方に書かれている場合は、~/.ssh/config の設定が優先されます。

前提環境

  • OS: Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04
  • OpenSSH クライアントバージョン: OpenSSH_9.6p1 Ubuntu-3ubuntu13.16(実測)
  • 実行環境: Docker(docker run --rm ubuntu:24.04
  • 検証日: 2026-06-13
Ed25519 SSH鍵の生成(ubuntu:24.04 実測)
Ed25519 SSH鍵の生成(ubuntu:24.04 実測)

Ubuntu 24.04 では ssh -V コマンドで OpenSSH_9.6p1 Ubuntu-3ubuntu13.16, OpenSSL 3.0.13 30 Jan 2024 と表示されました(2026-06-13 実測)。Ubuntu 22.04 では OpenSSH_8.9p1 なので、9.6p1 のほうが新しい機能(accept-new などの動作改善)が使えます。

手順1:~/.ssh ディレクトリと config ファイルを作る

まず ~/.ssh ディレクトリが存在するか確認し、なければ作成します。パーミッションの設定が最重要で、間違えると SSH が設定ファイルを読み込まないので注意してください。




ubuntu@linuxlab: ~
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ touch ~/.ssh/config
$ chmod 600 ~/.ssh/config
$ ls -la ~/.ssh/
total 8
drwx—— 2 ubuntu ubuntu 4096 Jun 13 10:09 .
drwxr-xr-x 7 ubuntu ubuntu 4096 Jun 13 10:09 ..
-rw——- 1 ubuntu ubuntu 0 Jun 13 10:09 config

ポイントは ~/.ssh/ のパーミッションが 700(自分だけ読み書き実行可)、config ファイルが 600(自分だけ読み書き可)であることです。

注意:パーミッションを間違えると動かない

Ubuntu 24.04 の Docker コンテナで実際に試すと、config644 にした状態で ssh -G myserver を実行すると Bad owner or permissions on /root/.ssh/config というエラーが出て設定が読み込まれませんでした。必ず chmod 600 ~/.ssh/config を実行してください。

~/.ssh ディレクトリとパーミッション設定(ubuntu:24.04 実測)
~/.ssh ディレクトリとパーミッション設定(ubuntu:24.04 実測)

手順2:基本的な接続設定を書く

~/.ssh/config を好みのエディタで開き、接続設定を書きます。基本的な構文は以下の通りです。




ubuntu@linuxlab: ~/.ssh/config
$ nano ~/.ssh/config
# VPS サーバーへの接続設定
Host myserver
HostName 203.0.113.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_myserver
Port 22

# 全サーバー共通の設定
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes
IdentitiesOnly yes

書き終えたら ssh -G コマンドで設定が正しく読み込まれているか確認できます。




ubuntu@linuxlab: ~
$ ssh -G myserver | grep -E ‘(user|hostname|port|serveralive|identityfile)’
user ubuntu
hostname 203.0.113.10
port 22
serveraliveinterval 60
identityfile ~/.ssh/id_ed25519_myserver

これで ssh myserver とだけ打てば ubuntu@203.0.113.10id_ed25519_myserver で接続できるようになります。

~/.ssh/config の基本的な書き方(Ubuntu 24.04 LTS 実測)
~/.ssh/config の基本的な書き方(Ubuntu 24.04 LTS 実測)

主なオプション一覧

オプション名 説明
Host エイリアス名(接続時に使う短縮名) Host myserver
HostName 実際のIPアドレスまたはFQDN HostName 203.0.113.10
User ログインユーザー名 User ubuntu
Port SSHポート番号(デフォルト22) Port 2222
IdentityFile 使用する秘密鍵のパス IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 切断防止のキープアライブ間隔(秒) ServerAliveInterval 60
IdentitiesOnly 指定した鍵だけを使用(他の鍵を試さない) IdentitiesOnly yes
ProxyJump 踏み台サーバー経由で接続 ProxyJump bastion

手順3:SSH鍵を生成して config に登録する

設定ファイルに登録する前に、まず Ed25519 形式の SSH 鍵ペアを作成します。Ubuntu 24.04 の OpenSSH_9.6p1 では Ed25519 が推奨形式で、RSA より短い鍵長で同等以上のセキュリティを実現します。




ubuntu@linuxlab: ~
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_myserver -C ‘your-email@example.com’
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Your identification has been saved in /home/ubuntu/.ssh/id_ed25519_myserver
Your public key has been saved in /home/ubuntu/.ssh/id_ed25519_myserver.pub
The key fingerprint is:
SHA256:5sTlNv5eYiCbZHkR0ZSjIc8fC69WrObFKbZvA/Krlus your-email@example.com
+–[ED25519 256]–+
| o+.. |
| . ..+ |
| +oo . |
+—-[SHA256]—–+

-f オプションで保存先ファイル名を指定しています。サーバーごとに別の鍵ファイル名にしておくと管理しやすくなります。生成後は公開鍵(.pub ファイル)をサーバーの ~/.ssh/authorized_keys に追記してください。




ubuntu@linuxlab: ~
$ ssh-copy-id -i ~/.ssh/id_ed25519_myserver.pub ubuntu@203.0.113.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “~/.ssh/id_ed25519_myserver.pub”
Number of key(s) added: 1
# または手動で:
$ cat ~/.ssh/id_ed25519_myserver.pub | ssh ubuntu@203.0.113.10 ‘mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys’

活用例1:複数サーバー・複数アカウントの切り替え

複数のVPSや GitHub の個人・会社アカウントを使い分けるときに、~/.ssh/config は特に便利です。同じ HostName でも Host エイリアス名を変えれば、接続に使う鍵を切り替えられます




ubuntu@linuxlab: ~/.ssh/config
# GitHub(個人アカウント)
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_personal

# GitHub(会社アカウント)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work

# Vultr VPS(東京リージョン)
Host vultr-tokyo
HostName 108.61.200.100
User root
IdentityFile ~/.ssh/id_work
StrictHostKeyChecking accept-new

実際に ssh -G で確認すると、github-personal では id_personal が、github-work では id_work が正しく選択されます(ubuntu:24.04 OpenSSH_9.6p1 で実証)。




ubuntu@linuxlab: ~
$ ssh -G github-personal | grep identityfile
identityfile ~/.ssh/id_personal
$ ssh -G github-work | grep identityfile
identityfile ~/.ssh/id_work

GitHub リポジトリへの push/pull では、リモートURLを git@github-personal:username/repo.git のように書き換えるだけで適用されます。

複数サーバー・複数鍵の ~/.ssh/config 設定例(ubuntu:24.04 実測)
複数サーバー・複数鍵の ~/.ssh/config 設定例(ubuntu:24.04 実測)

活用例2:踏み台サーバー経由の接続(ProxyJump)

本番環境では、インターネットから直接アクセスできない内部サーバーに踏み台(バスチョン)サーバー経由でアクセスするケースがあります。ProxyJump を使えば、踏み台サーバーへの接続を自動化できます。




ubuntu@linuxlab: ~/.ssh/config
# 踏み台サーバー
Host bastion
HostName 203.0.113.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_myserver

# 内部サーバー(bastionを経由して接続)
Host internal
HostName 10.0.0.5
User admin
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519_myserver

設定後は ssh internal とだけ打てば、自動的に bastion 経由で 10.0.0.5 に接続します。踏み台サーバーに手動でログインして再度 SSH する必要がなくなります。

活用例3:ポートフォワーディングの設定

データベース(MySQL / PostgreSQL)などのサービスに安全にアクセスしたいとき、SSH ポートフォワーディングが使えます。config に書いておくことで毎回オプションを打つ手間が省けます。




ubuntu@linuxlab: ~/.ssh/config
# データベースアクセス用(ローカル3307→リモート3306)
Host db-tunnel
HostName 203.0.113.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519_myserver
LocalForward 3307 127.0.0.1:3306

ssh db-tunnel を実行すると、ローカルの 3307 番ポートへの接続がサーバーの MySQL(3306番)に転送されます。mysql -h 127.0.0.1 -P 3307 で接続できます。

Ubuntu 22.04 vs 24.04 の比較(実測)

実際に両方の Docker コンテナを起動して ssh -Vdpkg -l openssh-client を実行した結果です。

Ubuntu 22.04 vs 24.04 OpenSSH バージョン比較(実測)
Ubuntu 22.04 vs 24.04 OpenSSH バージョン比較(実測)

22.04(Jammy)では OpenSSH_8.9p1、24.04(Noble)では OpenSSH_9.6p1 がインストールされました(2026-06-13 実測)。~/.ssh/config の構文はほぼ同一ですが、24.04 では StrictHostKeyChecking accept-new など新しいオプション値がより安定して動作します。

よくあるエラーと解決策

①Bad owner or permissions on ~/.ssh/config

最もよく見るエラーです。config ファイルのパーミッションが 644 や 666 になっていると発生します。Ubuntu 24.04 Docker コンテナで実際に再現を確認しました。




ubuntu@linuxlab: ~
$ ls -la ~/.ssh/config
-rw-r–r– 1 ubuntu ubuntu 456 Jun 13 config
# 644 だとエラーになる
$ ssh myserver
Bad owner or permissions on /home/ubuntu/.ssh/config
$ chmod 600 ~/.ssh/config # 修正
$ chmod 700 ~/.ssh/ # ディレクトリも確認
fixed: パーミッションを修正しました

②Host 設定が効いていない

Host に書いたエイリアスで接続しても設定が適用されない場合は、インデントが正しいか確認してください。Host 行より後の設定行はスペース4つまたはタブでインデントが必要です。また、ssh -G エイリアス名 で実際に読み込まれた設定値を確認できます。




ubuntu@linuxlab: ~
$ ssh -G myserver
user ubuntu
hostname 203.0.113.10
port 22
serveraliveinterval 60
identityfile ~/.ssh/id_ed25519_myserver
# 期待通りの値が表示されれば設定は正しく読み込まれています

③Host * の設定が特定ホストに干渉する

Host *(全サーバー共通設定)は 必ずファイルの末尾に書くのがルールです。SSH の config ファイルは上から順に評価され、最初にマッチした設定が優先されますHost * を先頭に書くと個別設定が上書きされるので注意してください。

まとめ

Ubuntu 24.04(OpenSSH_9.6p1)で ~/.ssh/config を使う場合のポイントをまとめます。

  • ~/.ssh/ を 700、config を 600 に設定する(パーミッションエラーの防止)
  • Host エイリアス名 で接続先ごとに設定をまとめる
  • IdentityFile で鍵ファイルを明示し、IdentitiesOnly yes で余計な鍵を試さないようにする
  • Host * の共通設定はファイルの末尾に書く
  • ssh -G ホスト名 で設定が正しく読み込まれているか確認する
  • GitHub の複数アカウントは Host github-personal / Host github-work で切り替え可能
  • 踏み台サーバー経由の接続は ProxyJump で自動化できる

SSH の設定ファイルをひとつ整えるだけで、毎日のサーバー操作がかなり楽になります。VPSを借りてサーバーを運用する場合は、最初にこの設定をしておくことをおすすめします。

ひとこと

実際に ubuntu:24.04 のコンテナで ssh -G を実行すると、config で指定した値がそのまま反映されているのが分かります。設定がうまく効いていないときはまずこのコマンドで確認してみてください。

本格的にVPSを借りてサーバーを運用したい方は、初期設定から SSH 鍵認証の有効化まで詳しく解説しています。

[LINK_ubuntu-ssh-setup_ARTICLE]

コメント

タイトルとURLをコピーしました