はじめに
Tera Termには、公開鍵と秘密鍵をセットで生成して、公開鍵をサーバー上の適切な場所に設置することで、公開鍵認証が簡単にできるという機能がある。しかし、手順に従って作業をしたつもりであっても「ログインに失敗しました」と表示されたり、そもそも接続できないといったことがある。
そもそも、SSH接続関連の設定は、一つ間違えると接続できなくなる危険性があるため、「接続を切らない」ことが重要となる。ログインの確認をしたい場合は、接続を切らずに、Tera Termの左上の「ファイル」タブから「新しい接続」を選択することで確認できる。そこでもしログインできない場合には設定を直すことができる。
以上を前提にして、この記事では「公開鍵認証が失敗する原因」に焦点をあて、どの手順で設定していけば最も安全に設定できるかという観点で、手順をまとめた。
SELinuxを無効化する
初期状態で以下のようになれば設定は不要である。
[root ~]# getenforce disabled
以下のようになった場合、SELinuxが有効化されているため、一時的な無効化と、再起動時に有効化しない設定をする必要がある。
[root ~]# getenforce enforcing [root ~]# setenforce 0 [root ~]# vi /etc/selinux/config #SELINUX=enforcing SELINUX=disabled :wq
これにより、SELinuxを永続的に無効化できる。
公開鍵認証でログインする一般ユーザの作成
一般ユーザ(ここではkyohju)を作成し、そのユーザに切り替える。
[root ~]# adduser kyohju [root ~]# su - kyohju [kyohju ~]$
そのまま公開鍵認証を有効化するため、一般ユーザのパスワードは設定しない。
Tera Term上で公開鍵・秘密鍵のペアを作成
以下の記事を参考に作成してほしい。「鍵のパスフレーズ」に何も入力せずに作成することも可能であるが、その場合は秘密鍵の管理に気をつけたい。
.sshディレクトリ、authorized_keysファイルの作成
Tera Termで作成した公開鍵を認識させるために、「.ssh」ディレクトリを作り、そこに公開鍵を転送する。
[kyohju ~]$ mkdir .ssh
公開鍵をTera Term上にSCP転送する。このとき、ディレクトリを指定しない場合、rootユーザのホームディレクトリに転送されてしまうので、ここでは「/home/kyohju」と指定する。
[kyohju ~]$ ls id_rsa.pub
これを公開鍵として認識されるように.sshディレクトリ内に移すとともに、名前を変更する。
[kyohju ~]$ mv id_rsa.pub .ssh/authorized_keys
所有者・権限の確認
各ファイルの権限を変更する。ls -laコマンドにより、現在の所有者、権限を確認できる。
[kyohju ~]$ ls -la drwxrwxr-x kyohju kyohju .ssh [kyohju ~]$ chmod 700 .ssh [kyohju ~]$ cd .ssh [kyohju .ssh]$ ls -la -rw-r--r-- kyohju kyohju authorized_keys [kyohju .ssh]$ chmod 600 authorized_keys
もし所有者がrootになっていた場合は、以下のコマンドにより、ログインするユーザを所有者にする必要がある。
[kyohju ~]$ ls -la drwxrwxr-x root root .ssh [kyohju ~]$ chmod 700 .ssh [kyohju ~]$ chown kyohju:kyohju .ssh [kyohju ~]$ cd .ssh [kyohju .ssh]$ ls -la -rw-r--r-- root root authorized_keys [kyohju .ssh]$ chmod 600 authorized_keys [kyohju .ssh]$ chown kyohju:kyohju authorized_keys
ここまでできたら、rootユーザに切り替えて公開鍵認証を有効にする。
[kyohju .ssh]$ exit [root ~]# vi /etc/ssh/sshd_config #PubkeyAuthentication yes PubkeyAuthentication yes :wq
デフォルトでは公開鍵認証の部分はコメントアウトされているため、#を消せばよい。
SSHサーバ再起動により、設定を反映する。
[root ~]# systemctl restart sshd
ここでエラーメッセージが何も表示されなければ設定完了となる。Tera Termの「ファイル」タブから「新しい接続」を選択し、一般ユーザ(この場合はkyohju)でログインしてほしい。
「RSA/DSA/ECDSA/ED25519鍵を使う」を選択した上で秘密鍵を参照する。
「鍵のパスフレーズ」に何も入力していない場合は「パスフレーズ」の部分に何も入力せず、入力した場合は、そのフレーズを「パスフレーズ」に入力する。
その他の設定
以下の設定は、公開鍵認証によるログインに成功した前提で進めていく。
①ファイアウォールの設定
以下のようになった場合、既に起動している。
[root ~]# systemctl status firewalld Active: active (running) since...
確認できたら、「:q」と打つことで確認終了できる。
以下のようになった場合は起動する必要がある。
[root ~]# systemctl status firewalld Active: inactive (dead) :q [root ~]# systemctl start firewalld
ファイアウォール起動後、22222の部分に任意のポート番号(1024以上65535以下)を入れてポートを開放する。以下のように設定することで、再起動後も反映される。
[root ~]# firewall-cmd --add-port=22222/tcp --zone=public --permanent success [root ~]# firewall-cmd --list-all ports: 22222/tcp [root ~]# firewall-cmd --reload success
②ポート番号変更、パスワードログイン禁止
最後に、開放したポート番号でSSH接続ができるようにするとともに、パスワードによるログインを無効化する。
[root ~]# vi /etc/ssh/sshd_config #Port 22 Port 22222 #PasswordAuthentication yes PasswordAuthentication no :wq [root ~]# systemctl restart sshd
以上の設定により、指定したポート番号でのみSSH接続可能になる。また、rootでのログインはパスワード入力を必要とするため、不可能になる。
再度、先ほど作成した一般ユーザで公開鍵認証が可能か確認するとともに、rootユーザへの切り替えができるか確かめておきたい。
[kyohju ~]$ su Password: <rootユーザのパスワード> [root kyohju]#
ここまで確認できたら、公開鍵認証の設定は完了となる。おつかれさまでした。