5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

使ってますか? SSH Config

はじめに

本稿は「株式会社オープンストリーム "小ネタ" Advent Calendar 2020」の14日目です。
過去2年ほど14日目を担当してたのでこの日を選んだのですが、特に思い入れはありません。

概要

サーバにSSHログインする時にテキストファイルに書いたものをコピペとかしてませんか? テキストファイルではなくそれ用の設定ファイルに特定の書式で記載しておけばsshコマンドがお手軽に利用できるようになります。
最初に基本的な使い方を説明し、その後に私が良く使う小技をご紹介していきます。

基本的な使い方

~/.ssh/config に必要な情報を記述するだけでsshコマンドが楽になります。
まずは例を見てみましょう。

~/.ssh/config
Host serverA
  Hostname 12.34.56.78
  User server-user
  IdentityFile ~/.ssh/id_rsa.pem

このファイルがある状態でコマンドラインで

$ ssh serverA

と打つだけで下記のコマンドと同じことができます。

$ ssh -i ~/.ssh/id_rsa.pem server-user@12.34.56.78

簡単に解説すると、Hostでコマンドラインで指定するためのホスト名(エイリアス的なもの)を、HostnameにサーバのIPアドレス、Userにユーザ名、IdentityFileに秘密鍵ファイルを指定します。
設定可能な項目の完全なリストはmanページ(本家 / (日本語版)を参照してください。

落とし穴

上記の例のままファイルを作成しても正しく動かないと思います。それはファイルのパーミッションに問題があります。
パーミッションを600にしておきましょう。

chmod 600 ~/.ssh/config

オートコンプリート

正しく設定ファイルが配置されるとsshコマンドでアクセス先のオートコンプリートが効くようになります。
Hostを適切に命名することで便利に利用することができます。

小技

ここからは私が使っている便利だと思っている小技をご紹介します。

踏み台をプロキシする

サーバ環境に直接ログインするのではなく、踏み台を経由することはしばしばあります。踏み台サーバに秘密鍵置いたりしてませんよね?

~/.ssh/config
Host bastion-server
  Hostname 11.22.33.44
  User bastion-user
  IdentityFile ~/.ssh/bastion.pem
Host server
  Hostname 10.0.0.1
  User server-user
  IdentityFile ~/.ssh/server.pem
  ProxyCommand ssh -W %h:%p bastion-server

踏み台サーバに関しては普通にログインするための記述をします。
その先にあるサーバのHostnameは踏み台サーバから見たローカルIPアドレスを指定し、ProxyCommandで踏み台サーバにログインするためのコマンドを記述します。
秘密鍵はどちらもクライアント側に配置します。

Includeでファイルを分割する

Includeを使うと設定ファイルを分割することが可能です。

~/.ssh/config
Include conf.d/hosts/*
Host serviceA-server1
Host serviceA-server2
Host serviceB-server1
Host serviceB-server2
~/.ssh/conf.d/hosts/serviceA
Host serviceA-server1
  Hostname 12.34.56.78
  User server-user
  IdentityFile ~/.ssh/serviceA-server.pem
Host serviceA-server2
  Hostname 12.34.56.79
  User server-user
  IdentityFile ~/.ssh/serviceA-server.pem
~/.ssh/conf.d/hosts/serviceB
Host serviceB-server1
  Hostname 23.45.67.89
  User server-user
  IdentityFile ~/.ssh/serviceB-server.pem
Host serviceB-server2
  Hostname 23.45.67.90
  User server-user
  IdentityFile ~/.ssh/serviceB-server.pem

~/.ssh/configにHostのみ記述しているのはオートコンプリートを効かせるようにするためです。
ディレクトリ構成は手元にあっただけなのでこの構成である必要はありません。

ワイルドカードを活用する

先ほどの例を見ると、UserやIdentityFileの設定値が繰り返されているのが気になります。
ユーザ名や秘密鍵ファイル名が変わることはそうそう無いとは思いますが、サーバが増設される場合を考えると省けるものは省きたいですね。
このような場合はワイルドカードを用いてまとめて記述することができます。

ワイルドカードはHostで使用可能で、アスタリスク(*)は任意の文字列、クエスチョンマーク(?)は任意の1文字を表します。
先ほどのファイルをワイルドカードを用いたものに書き換えてみます。

~/.ssh/conf.d/hosts/serviceA
Host serviceA-*
  User server-user
  IdentityFile ~/.ssh/serviceA-server.pem
Host serviceA-server1
  Hostname 12.34.56.78
Host serviceA-server2
  Hostname 12.34.56.79

2つのサーバで異なるのはHostnameのみなのでそこは個別に書き、共通のUserとIdentityFileはワイルドカードで記述しています。
例では記載していませんが、ProxyCommandもワイルドカードを用いた設定に記述することもできます。

まとめ

以上です。皆さんもSSH Configを活用して快適なSSHライフを満喫してください。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?