sshコマンドの設定ファイルssh_configについてです。

ほったん

開発をやっていると、色々なサーバのシェルにリモート接続して作業を行うことが多い。 そんな時に、いちいちホスト名を調べて、鍵ファイルパスを確認し、sshコマンドを叩くというのは骨が折れます。もっとも、こんな単純作業に無駄な時間と体力を使っている場合ではありません。

例えば、リモートホストに適当にニックネームをつけておいて、例えばAWSのいつも使うインスタンスであればawsなど、そうして、ssh awsだけでリモート接続できるようにしておけば便利です。

  • あ、awsマシンに入る必要があるな、と思いつき、
  • ターミナルを開いて、
  • 何も思わず、% ssh awsと叩く
  • ログイン完了

で、3秒以内にログインできるようになります。

このssh awsコマンドを実現するための設定を見ていきます。

ssh_configファイル

sshコマンドはデフォルトで~/.ssh/configを設定ファイルの一部として読み込みます。このファイルの中に、リモートホストへのログイン情報を書いておくと、上記のようなssh awsだけでログインできるようになります。

例えば、以下のようなリモートホストがある場合を考えてみます。

  • sshのIPアドレス: 12.34.56.78
  • sshのポート番号: 22
  • ログインユーザー名: user001
  • ログインの秘密鍵のパス: ~/.ssh/my-ssh-key

このホストをawsという名前にして、以下の設定を~/.ssh/configに書いておきます。

Host aws
  Hostname 12.34.56.78
  User user001
  Port 22
  IdentityFile ~/.ssh/my-ssh-key

以降はターミナルを開いて、ssh awsコマンドですぐにログインできます。

% ssh aws

user001@instance-1:~$ 

ちなみに、他のsshのオプションはコマンド時にアドホックに追加可能です。 例えば、上記のawsホストに対して、追加でPortForward(例えば、localのport 8080をawsマシンのport 80にforward)を追加する場合は以下のように書けます。

% ssh aws -L8080:localhost:80

このようにシンプル・クイックにリモートにログインできるようになりました。 もちろん、このリモートホストの設定は複数描けるようになっています。 また、sshの各種オプションも一緒に書けるようになっています。

Host aws
  Hostname 12.34.56.78
  User user001
  Port 22
  IdentityFile ~/.ssh/my-ssh-key

Host gcp
  Hostname 11.22.33.44
  User user123
  Port 10022
  IdentityFile ~/.ssh/my-ssh-for-gcp
  LocalForward 3306 localhost:3306  <= コマンドオプション`-L3306:localhost:3306`に同じ
...
...

どのような設定が使えるのかはマニュアルを参照ください。

参考