やりたかったこと

VPSや踏み台サーバーなど複数のサーバーを管理していて、毎回 ssh -i ~/.ssh/id_rsa ubuntu@203.0.113.10 みたいな長いコマンドを打つのが面倒だった。 ~/.ssh/config に設定を書いておけば ssh myserver だけで接続できると知ったので試してみた。

~/.ssh/configの基本的な書き方

ファイルを作成する

mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/config
chmod 600 ~/.ssh/config

configファイルのパーミッションは 600 にしないとSSHが無視するので注意。

Hostエイリアスを設定する

~/.ssh/config に以下を書く。

Host myserver
    HostName 203.0.113.10
    User ubuntu
    Port 22
    IdentityFile ~/.ssh/id_rsa

設定後は短いコマンドで接続できる。

ssh myserver

複数サーバーをまとめて管理する

Host web
    HostName 203.0.113.10
    User ubuntu
    IdentityFile ~/.ssh/id_rsa

Host db
    HostName 203.0.113.20
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_db_rsa

Host github
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_github_rsa

これで ssh webssh db と打つだけで接続できるようになった。

共通設定をまとめる

Host * を使うとすべてのホストに共通設定を適用できる。

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    AddKeysToAgent yes
  • ServerAliveInterval : 一定秒ごとに生存確認パケットを送る(接続が切れにくくなる)
  • AddKeysToAgent : SSH Agentに鍵を自動追加する

踏み台サーバー経由の接続(ProxyJump)

踏み台(bastion)を経由して内部サーバーに接続する場合も設定できる。

Host bastion
    HostName 203.0.113.1
    User ubuntu
    IdentityFile ~/.ssh/id_rsa

Host internal
    HostName 10.0.0.10
    User ubuntu
    IdentityFile ~/.ssh/id_rsa
    ProxyJump bastion
ssh internal
# bastionを経由してinternalに接続される

ハマったポイント

  • configファイルのパーミッションが 644 だとSSHに無視される(必ず 600 にする)
  • IdentityFile はチルダ始まり(~/.ssh/id_rsa)か絶対パスで書く
  • Host のエイリアス名は大文字小文字を区別しない
  • Port を省略すると22番ポートになる
  • SCPやrsyncでもconfigのエイリアスが使える(scp myserver:/path/to/file .

関連記事

おすすめのVPS/ドメイン/スクール

VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。