今回はSSHのログイン方式をより安全性の高い認証鍵方式に変更します。
現時点ではLAN内での接続しか行っていないのでパスワードログインでも十分と思いますが、今後LANの外からもアクセスを許可してモバイル環境でも操作ができるようにしたいのでその前にログイン方式を変更しておきます。
認証鍵方式の概要はPenguin’s campus noteさんの解説がわかりやすかったです。
設定の流れはこんな感じになります。
1.鍵のペア(公開鍵と秘密鍵)を作る
2.公開鍵をサーバーに保存
3.SSHの設定を変更して認証鍵方式にログイン方法を変更
4.接続テスト
1.鍵のペア(公開鍵と秘密鍵)を作る
さっそく鍵を作ります。SSHの接続に使っているTeraTermで作ります。
TeraTermを立ち上げて、設定→SSH鍵生成を選択
ダイアログが立ち上がるので、生成ボタンを押す。
(鍵の種類はRSA、ビット数は2048のままでOK)
「鍵のパスフレーズ」と「パスフレーズの確認」に同一のパスワードを入力。コメントは空欄でOK。
公開鍵の保存、秘密鍵の保存をクリックするとそれぞれ保存ダイアログが表示されるのでそれぞれ保存する。
以上で鍵の作成は終了。
2.公開鍵をサーバーに保存
作成した公開鍵をサーバに保存します。
なお公開鍵と同時に作成した秘密鍵をなくすとSSHでログインできなくなるのでなくさないようにしましょう。
TeraTermでRPiにログインします。まだ普通にログインできます。
ログインしたらユーザーのホームディレクトリで鍵格納用フォルダを作ります。
mkdir .ssh
作成したフォルダに鍵ファイルを作ります。
vi ~/.ssh/authorized_keys
新しいファイルが開くので、先ほど作成した公開鍵のファイル(デフォルト名「id_rsa.pub」)をテキストエディタで開いて
中身をすべてコピーし貼り付けます。この時あたまのssh-rsaも省かずコピーします。
貼り付けはTeraTermの編集→貼り付けでOK
また、viで鍵を貼り付ける際にiを押してインサートモードにしてから貼り付け作業を行ってください。
そうしないと頭の文字が消えてしまいます。
これでログインできず数時間悩みました。
できたら保存して終了します。
作成したファイルのパーミッションを設定します。
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
これで公開鍵のサーバへの保存は終了
3.SSHの設定を変更して認証鍵方式にログイン方法を変更
続いてSSHの設定を変更します。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org2
sudo vi /etc/ssh/sshd_config
[30~32行目付近]
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
↓ 32行目の#を外す
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
[52行目付近]
#PasswordAuthentication yes
↓ #を外し、yesをnoに変更
PasswordAuthentication no
以上で設定は終了なので保存して終了。
SSHサーバーを再起動して設定を読み込ませます。
sudo /etc/init.d/ssh restart
まだ作業していたターミナルは閉じないでおきます。
もし接続テストがうまくいかないとログインできなくなるので、
そういう時にはこのターミナルから修正するためです。
4.接続テスト
新しくターミナルを開いて初めのダイアログは今までと同じ設定でOKを押します。
今まで通りユーザ名とパスフレーズを入力してログオンを試みます。
→認証に失敗しました。再試行してください。
と出るはずです。パスワードでのログインを禁止したのでこれでOK
一回接続断を押して接続を切ります。
再度新しいターミナルを開いて、今度は鍵認証でログオンしてみます。
初めのダイアログはそのままOKボタン。
今度はRSA/DSA/ECDSA鍵を使うにチェックを入れて秘密鍵ボタンを押します。
ファイル選択のダイアログが開くので先に生成した秘密鍵(デフォルト保存名:id_rsa)を選択して開くボタン。
この状態で、ユーザ名はいつものユーザー名、パスフレーズは鍵を生成した際に入力したパスフレーズを入力してOKボタンを押します。
これで接続できればOKです。
接続できない場合は
sshd_configの設定がちゃんとできているか?
パーミッションの設定はできているか?
公開鍵は正しくコピーできているか?
などを見直します。
なおSSHのログは/var/log/auth.logなので以下のコマンドで見れます。
cat /var/log/auth.log
以上!疲れた~
2014年4月13日作成
2014年5月5日草稿公開
2018年6月10日リンク修正