はじめに
こんばんは。KMC のひよこ鑑定士 non117 です。Tumblrで回転寿司よろしくreblogするのが日課です。最近は、夜な夜なアブサンと角砂糖を舐めて過ごしています。
この記事はKMCアドベントカレンダー2013の12日目の記事で、昨日の記事は possum さんのautosshでした。また、この記事はKMCアドベントカレンダー2013のサブプロジェクトであるSSHアドベントカレンダー2013の記事でもあります。
SSHアドベントカレンダー2013、5日目はssh_configのお話です。
ssh_config
ssh_configとは、opensshで使えるsshの設定ファイルです。opensshとは、Unixやcygwin環境で一般的なsshのクライアントです。sshクライアントとして、puttyやtera termを使っているユーザには縁のない話になります。
コマンドラインでsshをするときには、
$ ssh -i ~/.ssh/example_key -p 30022 [email protected]
みたいに、オプションをたくさんつけることがあります。iで秘密鍵の指定、pでポートの指定、そして、ユーザ名にホスト名ですね。
しかし、三度の食事よりも寒い朝の二度寝よりもsshすることが好きな読者の皆様におかれましては、このようなオプションをいちいちつけてsshすることは面倒なことこの上ないことだと思います。
1回だけ接続するサーバなら兎も角、毎日ログインするサーバには予め設定を用意しておいて
$ ssh example
のようなシンプルなコマンドでサーバに接続したいところです。
そして、それを実現する方法がssh_configです。
具体的な設定方法
以下のようなファイルをホームディレクトリの .ssh/config つまり、 ~/.ssh/config に書きます。
あるいは、 /etc/ssh/ssh_config に書くと、そのシステム全体の設定にもなります。 システム全体と個人ユーザの設定が共存している場合には、ユーザ毎の設定が優先されます。
例:
Host example
Hostname example.net
Port 30022
User non117
IdentityFile ~/.ssh/example_key
- Host
- 次のHostキーワードが現れるまでの項目を1つの設定とします。 *, ?などのワイルドカードがつかえます。 ここでは、exampleがコマンドラインで使う設定名になります。
- Hostname
- ホスト名
- Port
- ポート番号
- User
- ユーザ名
- IdentityFile
- 秘密鍵のファイルへのパス
1つの設定の中でポート番号などの設定はどんな順番で記述しても構いません。 また、
Host *
Compression yes
ForwardAgent yes
TCPKeepAlive yes
IdentitiesOnly yes
のように書くと、すべてのホストに対するデフォルトとして記述できます。
別の設定を書きたければ、
Host hoge
Hostname hoge.org
Port 10022
User non
...
のように、exampleの設定の下にでも、Hostブロックを追記していくことになります。 また、Hostの設定名が異なれば、同じHostnameでも異なる設定として扱われます。
その他の文法やコマンド
- #でコメント
- LocalForward
- LocalForward 10080 10.8.0.2:80 のように設定し、ポート転送を行います。sshコマンドの -L オプションとほぼ同じです。詳細は nona さんの楽しいトンネルの掘り方(オプション: -L、 -R、 -f、 -N -g) を参考にしてください。
- RemoteForward
- LocalForwardと逆方向にポート転送を行います。
- ForwardX11
- X11転送を行うかどうかを設定します。"yes", "no" で設定します。デフォルトでは"no"になっています。詳細は tuda さんのX11 forwarding を参考にしてください。
応用
ssh_configは、 scpコマンドやgitコマンドでも使えます。
$ scp example:~/piyo.py .
$ git clone example:/git/poe.git
のように、Hostの設定名をコマンドに渡すだけです。
おわりに
この記事で紹介したsshの設定はごく一部ですが、これだけでも日々のsshが快適になるでしょう。私の記事が皆様のssh生活の一助になれば幸いです。
明日はnojimaさんによるauthorized_keysの解説です。