自分のパソコンのターミナルで ssh-keygen を実行する。ここでパスフレーズを入れると、公開鍵での接続の際にパスフレーズの入力が必要になります。パスフレーズを入れなければ接続の際にパスフレーズが必要ありません。自動化のための SSH の接続に使用する場合はパスフレーズを入れないと良いです。
1 2 3 4 5 | ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/example/.ssh/id_rsa): // ファイル作成場所 Enter passphrase (empty for no passphrase): // パスフレーズを入力する Enter same passphrase again: // パスフレーズをもう一度入力する |
~/.ssh ディレクトリに以下のようにファイルが生成されます。
1 2 3 | -rw------- 1 example staff 1743 5 14 16:29 id_rsa -rw-r--r-- 1 example staff 402 5 14 16:29 id_rsa.pub -rw-r--r--@ 1 example staff 3911 5 11 02:28 known_hosts |
id_rsa.pub をサーバのユーザーディレクトリの .ssh/ フォルダの中に authorized_keys という名前で保存する。フォルダがなければ、まずは以下のようにサーバー側に必要なディレクトリの作成から始めます。
1 2 | cd ~ mkdir .ssh |
次にローカルから .ssh フォルダの中に対して以下のようにしてファイルを転送します。
1 | scp -P 10022 ~/.ssh/id_rsa.pub example@example.com:~/.ssh/authorized_keys |
転送が終わったらサーバー側でパーミッションを調整します。
1 2 | chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys |
この段階で公開認証鍵を使ったログインができる状態になります。
これを公開認証鍵のみでのログインできる状態に変更します。
以下のファイルを編集します。ついでにいろいろ設定しましょう。
1 2 | su vim /etc/ssh/sshd_config |
PermitRootLogin を no にすることで root によるログインを禁止することができます。without-password を設定すればパスワードによるログインを禁止することができます。
1 | PermitRootLogin no |
PasswordAuthentication を no にすることで root のみならず全てのユーザーでパスワードによるログインを禁止することができます。これで認証鍵を持っていなければログインすることができなくなります。
1 | PasswordAuthentication no |
PermitEmptyPasswords を no に設定することで空のパスワードでのログインを禁止することができます。
1 | PermitEmptyPasswords no |
設定が完了したら SSH の設定を反映させましょう。
1 | /etc/init.d/sshd restart |
認証鍵の設定ですが、きちんと設定が反映されているかをチェックする際はこの段階でログアウトせずに別のウィンドウでログインできるかを試すべきです。万が一設定に問題があった場合、一度ログアウトしてしまうと二度とログインできなくなります。私はこれで1度サーバーを初期化しなければいけなくなりました。
コメント