はじめに
SSH接続を行う場合、クライアント側で、コンフィグファイルの設定を行う必要があります。コンフィグファイルのディテクティブには、デフォルトで用意されているもの以外に、たくさんのディテクティブが存在します。普段は見過ごされがちなディテクティブについて書いてみました。
基礎知識
公式マニュアルはこちらです。
https://linux.die.net/man/5/ssh_config
OpenSSHのコンフィグファイルには2種類あります。個人の環境で使う分にはどちらで設定しても同じです。ログインするユーザーによって切り分けて使いたい場合は、「~/.ssh/config」で設定することになります。
- システム全体で有効にさせる場合
/etc/ssh/ssh_config
- ユーザー単位で有効にさせる場合
~/.ssh/config
SSHでホストに接続するときの認証の仕方には、パスワード認証と公開鍵方式との2種類があります。サーバーがどちらの認証方式を受け付けているかによって、クライアント側の設定が変わってきます。外部に公開されているサーバーであれば、殆どの場合、公開鍵方式を採用しているはずです。社内用のサーバーであれば、パスワード認証にしている場合も普通にあります。両方を受け付けているようなことはあまりないはずです。
コンフィグファイルのディテクティブの設定は、基本的にこのような設定になります。
HostNameとuserの設定は必須になります。
- ひな形
Host 任意の名前
HostName 接続先のIP
user ログインするユーザーID
- 設定例
Host hoge_host
HostName 192.168.1.10
user hoge_user
ディテクティブの説明
PasswordAuthentication
パスワード認証を行うかどうかの設定になります。デフォルトではyesです。公開鍵方式だけを使っており、パスワードによる認証は行っていない場合は、明示的にnoすると、パスワード認証は試みなくなります。
接続を試みる優先度を、パスワード認証より公開鍵方式の方を高くした場合、yesにしていても、先に公開鍵方式で接続しにいき、そこで認証がOKになれば、パスワード認証は行われなくなるため、なんら問題になることはありません。
公開鍵方式で接続を行いたいが、接続を試みる優先度を公開鍵方式よりもパスワード認証の方を高くした場合、yesにすると、先にパスワード認証で接続しにいこうとするため、注意が必要になります。
IdentityFile
クライアント側に保存されている秘密鍵のファイルのパスを指定します。
省略するとデフォルトで、~/.ssh/id_rsa および ~/.ssh/id_dsa になります。作成した鍵のファイル名をデフォルトのまま運用している場合は、省略して問題ないでしょうが、複数の鍵を保存していて、接続先ごとに使い分けて運用している場合は、ファイル名を明示的に設定する必要があります。
Port
SSHのデフォルトのポート番号は22です。省略すると22が有効になります。セキュリティ強化のため、22を変更している場合も想定されます。22以外を使っている場合は、明示的に指定する必要があります。
PreferredAuthentications
認証を試みる順番を指定します。デフォルトではつぎの順番になっています。
「gssapi-with-mic、hostbased、publickey、keyboard-interactive、password」
password認証しか行わない場合はpasswordを先頭に持ってきておいた方が、ネゴシエーションが発生しなくなるため、接続速度が若干上がるはずです。
ssh
sshのバージョンを指定します。デフォルトでは、1,2となっているため、あまりこだわる個所ではないでしょう。ssh1にはセキュリティ的な脆弱性があるため、殆どの場合ssh2を使っているはずです。ssh1での接続を禁止するような場合は、2を明示的に指定することになります。
StrictHostKeyChecking
ホスト認証で使われる公開鍵をクライアント側の.ssh/known_hostsに登録するかどうかを設定する個所です。デフォルト値はaskです。つまり、.ssh/known_hostsに登録がなければ、登録するかを聞いてきます。noにすると、.ssh/known_hostsに登録がなければ、聞いてくることなく、強制的に書き込みをおこいます。yesにすると、.ssh/known_hostsへの登録を自動で行わなくなるため、毎回必ず手動で登録することになります。いちいち面倒なので、yesにするようなことはあまりないかと思われます。しかし、yesにすればトロイの木馬攻撃に対しては有効になるといったメリットがあります。
askの場合、既存鍵が新しい鍵に変更になった場合、新しい鍵が.ssh/known_hostsに自動で登録されないため、接続に失敗するといったデメリットがあります。この場合は手動で鍵を登録することになります。しかし、noにしておけば、新しい鍵になっても何事もなかったかのように接続してくれるといったメリットがあります。
UserKnownHostsFile
ホスト認証で使われる、公開鍵を登録するファイルのパスを指定します。普通、~/.ssh/known_hostsを使いますが、
別ファイルを用意するような場合は設定が必要になります。恐らく、そのようなことはほぼほぼないでしょう。