[SSH] 公開鍵認証でSSH接続(TeraTerm利用)

CentOS7で公開鍵認証を使ってSSH接続する方法です。
ルートではログインできないようにして、ユーザーで公開鍵認証するようにします。
Contents
ルートのパスワードの設定
VPSなどのサービスを利用しているとき、rootのパスワードが設定されていないことがあるので、まず、rootのパスワードを設定します。
[環境]
CeontOS7x
Windows10 TeraTerm
KAGOYA VPS
KAGOYA VPSの場合、ルートのパスワードが無しで鍵を使ってログインになっています。
1 2 3 |
$ passwd changing password for user root. New password: |
ユーザーの作成
rootでの公開鍵認証はセキュリティ上良くないので、ユーザーを作成してユーザーでログインするようにします。
ユーザーを作成し、パスワードを設定します。
1 2 |
# adduser sample $ passwd sample |
TeraTermにユーザーでログインします。
ここは鍵を使ってのログインではなく、平文(プレインパスワード)を使用してログインにします。
SSHポートの変更
vi /etc/ssh/sshd_configで port xxxxのようにSSHのポート番号を変更しておく。
[MEMO]KAGOYA VPSはCentOS7でfirewalldではなく、iptablesを利用している。 sshd_configを変更すると接続できなくなるので注意。
「SSHの設定」
1 2 3 4 5 6 |
vi /etc/ssh/sshd_config #port 22 port XXXX ←任意のポート ListenAddress 0.0.0.0 ←有効にする |
「Iptablesの設定」
1 |
# vi /etc/sysconfig/iptables |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
*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でアップロードされたファイルを移動してサーバーに設置します。
1 2 3 4 5 |
$ 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 で以下の項目を設定します。
1 2 |
PermitEmptyPasswords no PasswordAuthentication no |
1行目:パスワードが設定されていないアカウントの利用禁止
2行目:パスワード認証方式を無効にする(plain password禁止)
設定が終わったらSSHを再起動します。
1 |
# systemctl restart sshd |
これで平文(plain)で接続すると接続できなくなります。
ルートでログイン出来ないようにする
vi /etc/ssh/sshd_config で以下の項目を設定します。
1 |
$ PermitRootLogin yes → PermitRootLogin no |
ターミナルからログアウトして、再度ログインしようとしたとき、変更したSSHのポートでログインできないときがあります。これはIptablesを再起動がされていないときですので、サーバーを再起動すればログインできるようになります。関連記事
- [CentOS] CentOS6.x KagoyaVPSの設定
- [Linux] SSHのポート番号を変更する方法
- [CentOS7] SSHのポート番号変更
- [CakePHP] CakePHPのインストールと各種設定
- [CentOS] SELinuxを無効化する方法