サーバー認証を鍵で行う方法

2015年4月5日

サーバー

WEBサーバーの運用をする場合、ID/PWでSSHアクセスをしていると、パスワードを知っている人であれば、世界中どの場所からもアクセスしてログインが可能になってしまいます。 色々な方法で回避できますが、とりあえず、その端末だけがアクセス可能な鍵を登録してしまうことで、まずはクライアント端末認証、鍵認証と2段階のセキュリティを設けることができるので、サーバーの設定方法と運用方法をメモします。

設定方法

1.クライアント端末の鍵を作成(macとLinux) # ユーザーrootの.sshフォルダに移動(ない場合は作る) $ cd ~/.ssh $ ssh-keygen -f hoge -t rsa $ password : [blank] $ retype-password : [blank] # 今回はパスワードを無しでセット
-f : 出力ファイル名 -t : 暗号化方式
コマンドを実行すると、以下の2ファイルが作成される。 hoge(秘密鍵) hoge.pub(公開鍵) 2.サーバー(Linux)に公開鍵をアップロード $ scp hoge.pub %user%@%server-address%:~ password:** 通常のsshと同じようにパスワードを入力してください。 3.サーバー設定 # サーバーにアクセス $ ssh %user%@%server% password:*** # ユーザーディレクトリへ移動 $ cd ~ # .sshフォルダが存在しない場合 $ mkdir .ssh $ chmod 700 .ssh # サーバーで認証できるように「authorized_keys」に登録する。 cat ~/hoge.pub >> ~/.ssh/authorized_keys # パーミッションを整える chmod 600 ~/.ssh/authorized_keys 4.クライアントのターミナルから、アクセスしてみる。 $ ssh -i hoge %user%@%server-address% パスワードなしでログインできれば、成功です。お疲れ様でした。

パスワードが聞かれる場合

実はこれですんなりログインできない場合がある。 上記でも書いてあるが、パーミッションの設定を非常にシビアに行わないと、一切適応できない。 注意ポイントは以下 1.「authorized_keys」のファイル権限が600かつ、対象ユーザー 2.「.ssh」ディレクトリのパーミッションが700 3.ユーザーのルート・ディレクトリのパーミッションが700 とりあえず、上記がセットされていれば、問題ないはずだが、これでもうまくいかない時は、ログを確認しよう。 # ubuntuの場合 $ tail -f /var/log/auth.log

その他の作業

sshでパスワードログインが必要ない場合は、/etc/ssh/sshd_configを修正して、パスワード認証をOFFにしてしまおう。 sshd_configを修正した後は、モジュールのrestartだが、その前にsshd_configのsyntaxチェックをしてみよう。 $ which sshd /usr/sbin/sshd $ /usr/sbin/sshd -t # 何も表示されなければ問題なし

SSHでrootログインを許容するには

# /etc/ssh/sshd.config ParmitRootLogin yes $ service sshd restart