LinuxサーバのSSHの設定や、公開鍵認証の設定についてまとめました。
【/etc/ssh/sshd_config】
よく変更するところをまとめました。デフォルト値はSSHのバージョンによって違ったりします。
※sshd_configはサーバ側の設定ファイル(接続される側)
ssh_configはクライアント側の設定ファイル(接続する側)
設定項目 | デフォルト | よくやる設定値 | 備考 |
PermitRootLogin | yes | no(※without-password) | rootでの直接ログイン。大抵の現場ではnoが多い |
Protocol | 2,1 | 2 | プロトコル1には暗号上の弱点があり使うべきではない。opensshの古いバージョンだとデフォルトでプロトコル1も許可している場合がある。 |
MaxAuthTries | 6 | 5 | セキュリティー要件で5回にするとなっていることが多い気がする。 |
LogLevel | INFO | INFO | セキュリティー要件で何も言われなければINFOでよい。DEBUGにまでしてしまうと余計な出力が多いのでやめた方がいい。 |
HostKey | (色々) | ssh_host_rsa_key |
dsaとかecdsaとかデフォルトは色々使えるけど、必要なやつだけ使う状態にしておいた方がよい。known_hostsに不要なdsaの鍵情報が保存されて後で消すことになったりする。rsaにしとけば問題ない。 |
Allowgroups | – | (OSグループ名) | セキュリティーにうるさい現場だと設定することもある。 |
Ciphers | (色々) | 弱い暗号方式を消す | 暗号方式の設定でまれに脆弱性があるから特定のやつを外したりする。その際に接続先が古めのネットワーク機器だったりすると、使える暗号方式が限られていて、その暗号方式じゃないと接続できないことがあったりするので注意。 |
MACs | (色々) | 弱い暗号方式を消す | 同上 |
※PermitRootLoginをnoにするとスクリプトでrootログインして実行している処理もできなくなるので注意。without-passwordにすると、パスワード認証は禁止するが、それ以外の鍵認証などは使えるようになる。スクリプトでrootでログインする必要がある場合は鍵交換をして、公開鍵認証でSSHさせるようにすればよい。
設定を反映するためにプロセスを再起動する。
stopsrc -s sshd
startsrc -s sshd
もしくは
kill -HUP (sshdのPID)
※sshの再起動の際にsshdを停止しても既存の接続に影響はなく、停止している間は新しい接続ができないだけ。いきなりブチっと切れて接続できなくなることはない。
http://equj65.net/tech/sshdprocess/
【公開鍵認証の設定】
・鍵の作成
ssh-keygen -t rsa -b 4096 -C “(コメント)” -f (鍵ファイル名)
「-t rsa」 → 認証方式はrsaにしておけばセキュリティー的に問題ない。
「-b 4096」→ 鍵長の指定。rsaならばデフォルトだと2048になる。
4096にしておけば大抵のセキュリティー要件をパスできると思う。
「-C “(コメント)”」→ id_rsa.pubの最後に記載される文字列が指定したコメントになる。
ちなみにあとからでも変更可能。viで該当部分を直すだけ。
コメントなので書き換えても認証できなくなることはない。
※鍵作成の際にパスフレーズを設定すると、スクリプトで鍵認証でsshする際に
パスフレーズの入力を対話形式で求められるので、パスフレーズなしにする場合が多い。
パスフレーズありでもスクリプトを工夫すれば何とかなる。けどめんどい。
※鍵作成はどこのサーバで作成して、どこのサーバに配置しても問題ない。
秘密鍵と公開鍵のペアさえ合っていれば認証できる。
・鍵を配置する
ディレクトリやファイルのパーミッションに要注意。
間違っていると認証に失敗します。
鍵ファイルの名前をデフォルトから変更している場合は、sshする際に使用する鍵ファイル名を指定する必要があります。
・秘密鍵から公開鍵を生成する方法
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
【SSHのデバックモードで原因調査】
うまくいかない場合はデバックモード(-v)でSSHを実行することでつながらない原因を調査できる。オプションのvの数を増やすとより細かいログが出る(最高3つまで)。syslogの出力内容も見てみるとよい。
ssh -vvv (ユーザ名)@(サーバ名)
【SSHの個人用設定】
通常は/etc/ssh/ssh_configが使用されるが、~/.ssh配下にconfigファイルを配置するとそちらが優先される。
設定例)
cat /home/user1/.ssh/config
Host serverA
HostName serverA
Identityfile ~/.ssh/id_rsa
User ope001
上記の設定をしている場合、
user1で「ssh serverA」と実行すると、「ssh -i ~/.ssh/id_rsa ope001@serverA」と同義になる。
【authorized_keysのfromオプションで接続元を制限】
authorized_keysには公開鍵の内容を記載すればOKですが、よりセキュリティを高めるためにfromオプションを使用して、公開鍵ごとにホストを限定することができます。
設定の仕方は行頭にfrom=””を記載するだけです。
from=”10.1.1.100,10.1.1.200″ ssh-rsa AAAACVG……
・カンマ区切りで複数の対象を記載できる。
・ホスト名での指定もできる(らしいがIPでないとうまくできなかった)
・サブネット単位の指定もできる(らしいが試したことはない)
(例)10.1.1.0/24
コメント