![](https://www.searchlight8.com/wp-content/uploads/2016/02/photo_00124-wpp1707396737331-870x580.jpg)
CentOS7で公開鍵認証を使ってSSH接続する方法です。
ルートではログインできないようにして、ユーザーで公開鍵認証するようにします。
ルートのパスワードの設定
VPSなどのサービスを利用しているとき、rootのパスワードが設定されていないことがあるので、まず、rootのパスワードを設定します。
[環境]
CeontOS7x
Windows10 TeraTerm
KAGOYA VPS
KAGOYA VPSの場合、ルートのパスワードが無しで鍵を使ってログインになっています。
$ passwd changing password for user root. New password:
ユーザーの作成
rootでの公開鍵認証はセキュリティ上良くないので、ユーザーを作成してユーザーでログインするようにします。
ユーザーを作成し、パスワードを設定します。
# adduser sample $ passwd sample
TeraTermにユーザーでログインします。
ここは鍵を使ってのログインではなく、平文(プレインパスワード)を使用してログインにします。
SSHポートの変更
vi /etc/ssh/sshd_configで port xxxxのようにSSHのポート番号を変更しておく。
[MEMO]KAGOYA VPSはCentOS7でfirewalldではなく、iptablesを利用している。 sshd_configを変更すると接続できなくなるので注意。
「SSHの設定」
vi /etc/ssh/sshd_config #port 22 port XXXX ←任意のポート ListenAddress 0.0.0.0 ←有効にする
「Iptablesの設定」
# vi /etc/sysconfig/iptables
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport XXXX -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT -A INPUT -p tcp -m tcp --sport 20 -j ACCEPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m tcp --sport 21 -j ACCEPT COMMIT
[MEMO]
利用しているVPSでは初期状態でrootに公開鍵が設定されていました。rootのパスワードは無し。ユーザーを作成し、rootにパスワードを付与してから下記の作業に入りました。
TeraTermで鍵生成
ROOTで入れるようにするのは危険なので、ユーザーでログインしての作業になります。
鍵の生成
鍵の種類はRSAにして、右側の生成ボタンを押します。
押すと、鍵が生成されます。
鍵にパスワードを入れます。
パスワードを入力したら、
「公開鍵の保存」
「秘密鍵の保存」
を押して、ローカルPCに保存します。
今回はデスクトップに保存することにします。
サーバーに鍵のアップロード
TeraTermからサーバーにSSHでファイルをアップします。
ファイルの「SSH_SCP」を選択します。
デスクトップにある「id_rsa.pub」を選択します。
宛先は「~/」にします。
入力したら「Send」ボタンを押します。
公開鍵の設置
TeraTermのSCPでアップロードされたファイルを移動してサーバーに設置します。
$ pwd /home/sample $ mkdir .ssh $ chmod 700 .ssh $ mv id_rsa.pub .ssh/authorized_keys
まず、ユーザーのディレクトリを確認。
/home/user名 のディレクトリで作業します。
.sshフォルダ(ディレクトリ)を作ります。
パーミションを700に変更します。
id_rsa.pubファイルをリネームして、移動します。
ここまで終わったら一度TeraTermの接続を切ります。
TCPポートを、変更したSSHポート「XXXX」にして接続します。
今度はプレインテキストログインではなく、公開鍵のログインにします。
RSA鍵を使うを選択し、デスクトップに保存した「id_rsa」ファイルを選びます。
公開鍵以外でログイン出来ないようにする
vi /etc/ssh/sshd_config で以下の項目を設定します。
PermitEmptyPasswords no PasswordAuthentication no
1行目:パスワードが設定されていないアカウントの利用禁止
2行目:パスワード認証方式を無効にする(plain password禁止)
設定が終わったらSSHを再起動します。
# systemctl restart sshd
これで平文(plain)で接続すると接続できなくなります。
ルートでログイン出来ないようにする
vi /etc/ssh/sshd_config で以下の項目を設定します。
$ PermitRootLogin yes → PermitRootLogin no
ターミナルからログアウトして、再度ログインしようとしたとき、変更したSSHのポートでログインできないときがあります。これはIptablesを再起動がされていないときですので、サーバーを再起動すればログインできるようになります。