サーバーの台数が増えると、SSH接続のたびにIPアドレス・ポート番号・ユーザー名・鍵ファイルのパスを入力し直す手間が生じます。入力ミスによる接続失敗はもちろん、似通ったIPアドレスが並ぶ環境では誤接続のリスクも高まります。~/.ssh/config(SSH設定ファイル)を使うと、こうした情報をエイリアスに紐づけて一元管理でき、ssh webserver のような短いコマンドだけで正確に接続できるようになります。
SSH設定ファイルで解決できること
一度設定ファイルに書いておくと、接続のたびに長いオプションを並べる必要がなくなります。想定例として、次のような長いコマンドを
ssh -i ~/.ssh/id_ed25519_web -p 2222 deploy@192.0.2.10
以下の1行で代替できるようになります。
ssh webserver
主な効果は次のとおりです。
- ホスト名・IPアドレス・ポートを毎回入力しなくてよくなる
- 接続先ごとの鍵ファイルの指定を省略できる
- ユーザー名の入れ間違いを防ぎやすくなる
- バージョン管理に含めてチーム内で共有し、接続先の表記ゆれをなくせる
設定ファイルの場所と権限の確認
SSH設定ファイルのパスは ~/.ssh/config です。存在しない場合は新規作成します。ファイルが存在するかは次のコマンドで確認できます。
ls -la ~/.ssh/config
存在しない場合は次のコマンドで作成してください。
touch ~/.ssh/config
設定ファイルの権限は、所有者のみ読み書きできる 600 に設定する必要があります。権限が緩いとSSHがセキュリティポリシーにより設定ファイルを無視するため、登録した内容がまったく反映されなくなります。
chmod 600 ~/.ssh/config
Hostブロックの基本的な書き方
設定は Host ブロック単位で記述します。Host の行でエイリアスを定義し、その下にインデントを入れて各ディレクティブを並べます。次の想定例では、2台のサーバーへの接続情報をそれぞれ登録しています。
Host webserver
HostName 192.0.2.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_web
Host dbserver
HostName 192.0.2.20
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519_db
各ディレクティブの意味は次のとおりです。
- Host:接続時に
sshコマンドで指定するエイリアス名 - HostName:実際のホスト名またはIPアドレス
- User:ログインユーザー名
- Port:接続先ポート(省略時は
22) - IdentityFile:使用する秘密鍵のパス
全ホストに共通の設定は Host * にまとめる
Host * ブロックを設定ファイルの末尾に置くと、全接続に適用されるデフォルト値を定義できます。Host ブロックは先に記述されたものが優先されるため、個別設定を上に、共通設定を末尾に置くのが基本の書き方です。
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes
ServerAliveInterval は秒単位で、設定した間隔ごとにサーバーへパケットを送ってアイドル切断を防ぎます。AddKeysToAgent yes を指定しておくと、ssh-agent が起動していれば接続時に鍵が自動登録されます。
踏み台サーバー経由の接続を設定する
踏み台サーバー(バスティオンホスト)を経由してプライベートネットワーク内のサーバーに接続する構成は、クラウド環境でよく見られます。毎回踏み台のホスト名やユーザー名を指定するのは手間がかかるうえ、誤って踏み台に直接接続したまま作業してしまうミスも起きやすくなります。
ProxyJump ディレクティブを使うと、踏み台経由の接続を設定ファイルにまとめられます。次の想定例では、bastion を踏み台として internal-server に接続する構成を定義しています。
Host bastion
HostName bastion.example.com
User ec2-user
IdentityFile ~/.ssh/id_ed25519_bastion
Host internal-server
HostName 10.0.1.100
User admin
IdentityFile ~/.ssh/id_ed25519_internal
ProxyJump bastion
この設定により、ssh internal-server と入力するだけで踏み台を経由した接続が行われます。踏み台のホスト名やユーザー名を毎回入力する必要がなくなり、接続先を取り違えるリスクを減らせます。ProxyJump にカンマ区切りで複数ホストを指定すると、踏み台を2段以上経由する構成にも対応できます。
設定が正しく読み込まれているか確かめる
-v オプションを付けて接続すると詳細ログが出力され、SSHがどの設定ファイルのどのエントリを使ったかを確認できます。
ssh -v webserver
出力の中に次のような行があれば、設定ファイルが正しく読み込まれています。
debug1: Reading configuration data /home/username/.ssh/config
debug1: /home/username/.ssh/config line 1: Applying options for webserver
実際に接続せずに設定内容だけを確認したい場合は -G オプションが便利です。接続先ホスト名・ユーザー名・鍵ファイルのパスなど、そのエイリアスに適用されるすべての設定値が一覧表示されます。
ssh -G webserver
よくあるつまずきと対処法
設定したはずのオプションが反映されない
一般的なつまずきとして多いのが、ファイルの権限が 600 より緩い状態(644 や 666 など)です。SSHはセキュリティポリシーにより、権限が緩い設定ファイルを無視します。まずは次のコマンドで権限を確認・修正してください。
ls -la ~/.ssh/config
chmod 600 ~/.ssh/config
また、同一ファイル内に同じ Host 名が複数あると、最初のブロックだけが有効になります。意図せず同名エントリが重複していないかも確認してください。
scp・rsync でもエイリアスをそのまま使える
ssh コマンドだけでなく、scp や rsync でも Host エイリアスをそのまま指定できます。
scp localfile.txt webserver:/var/www/html/
rsync -av ./dist/ webserver:/var/www/html/
うまく接続できない場合は ssh -v エイリアス名 で詳細ログを確認し、どの設定が適用されているかを調べるのが近道です。ssh -G エイリアス名 で期待どおりの値が出ているかも合わせて確認すると、問題の切り分けがしやすくなります。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
