やりたかったこと
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 web、ssh 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 .)
関連記事
- LinuxのSSH接続の基本(VPSに接続する方法)
- SSHキーを生成してGitHubに登録する方法
- Linuxのファイルパーミッション(chmod/chown)完全ガイド
- rsyncでファイルを同期・バックアップする方法
- VPSにDockerをインストールして本番環境を構築する方法
おすすめのVPS/ドメイン/スクール
VPSを使って本番環境を構築するなら、以下のサービスがおすすめです。