はじめに
自宅にサーバを設置できないのでConoHaでVPSを借りました。
安さが決め手でした!
今回は安全に接続するため公開鍵でsshできるよう設定しました。
できるようになること
下記のコマンドだけでVPSにセキュアに簡単に接続できる。
ssh ホスト名
対象読者
- 初めてVPS借りる人
- 初めてパブリックな環境にサーバを立てる人
環境
- VPS側ゲストOS:CentOS8
- sshクライアント側OS:Ubuntu18.04.4 LTS (Bionic Beaver) ※WSL
やったこと
ざっくり下記の順番で進めていきます。
- sudo権限のユーザをつくる
- rootでsshできないようにする
- 公開鍵認証のみでsshできるようにする
- sshで利用するポート番号を変更する
sudo権限のユーザをつくる
VPS側のコンソールで操作します。
まずsudoの際にパスワードを入れなくていいように設定します。
visudo
#下記の部分がコメントアウトされているため外す
%wheel ALL=(ALL) NOPASSWD: ALL
任意のユーザを追加する。(例としてadminでやります)
useradd -m admin
パスワード設定
passwd admin
sudoのグループに設定する。
usermod -aG wheel admin
adminからパスワードなしでユーザ変更(su)するため、/etc/pam.d/suを編集する。
sudo vim /etc/pam.d/su
#下記の部分がコメントアウトされているため外す
auth sufficient pam_wheel.so trust use_uid
ユーザ変更できるか試す。
su - admin
su -
ユーザ変更できる。
rootでsshできないようにする
一応本作業前にそもそもクライアント側からsshできるか確認する。
ssh -l admin IPアドレス
rootでログインできないように設定する。
sudo vim /etc/ssh/sshd_config
#yesをコメントアウトnoを追記
#PermitRootLogin yes
PermitRootLogin no
設定を反映する。
sudo systemctl restart sshd
これでrootでは接続できなくなった。これからは作成したユーザのadminで接続する。
公開鍵認証のみでsshできるようにする
sshクライアント側で鍵を生成する。
cd ~/.ssh #なければ作成する
ssh-keygen -t rsa -f ホスト名 #パスワード設定は任意
鍵がある場所にて鍵に対して権限設定する。
chmod 600 ホスト名
生成した鍵をVPS側に転送する。
ssh-copy-id -i ~/.ssh/ホスト名.pub admin@IPアドレス
sshの設定ファイルを記述する。
sudo vim ~/.ssh/config
#下記設定を追記
Host ホスト名
Hostname IPアドレス
User admin
IdentityFile ~/.ssh/ホスト名
Port 22
VPS側でパスワード認証を許可しないように設定する。
sudo vim /etc/ssh/sshd_config
#yesをコメントアウトnoを追記
# PasswordAuthentication yes
PasswordAuthentication no
設定を反映する。
sudo systemctl restart sshd
sshで接続してみる。
ssh ホスト名
sshで利用するポート番号を変更する
デフォルトの22のままにしておくと攻撃されやすいため、VPS側ゲストOSおよびsshクライアント側のssh設定ファイルを変更しPortを他で利用のない任意の値に変える。
まずはsshクライアント側のssh設定ファイルを変更する。
sudo vim ~/.ssh/config
Host ホスト名
Hostname IPアドレス
User admin
IdentityFile ~/.ssh/ホスト名
Port 52222
次にVPS側ゲストOSの設定を変更する。
firewalldサービスにてsshは22で受信するよう制御されている。
cat /usr/lib/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol ...</description>
<port protocol="tcp" port="22"/>
</service>
よって52222で受信するよう変更する。
変更する際には下記のようなルールがあるそうです。
CentOS 7 の firewalld では、/usr/lib/firewalld/ はシステムの初期設定を保存しておくディレクトリと位置付けており、ユーザーがカスタマイズした設定は /etc/firewalld/ 内に配置するようにデザインされています。 よって、設定を変更したssh.xml は /etc/firewalld/services/ に設置する必要があります。
CentOS 7 で sshd のポート番号を変更する方法
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
vim /etc/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol ...</description>
<port protocol="tcp" port="52222"/>
</service>
設定を反映する。
firewall-cmd --reload
ssh で接続してみる。
ssh ホスト名
つながった!!
おわりに
お疲れさまでした!
sshポート変更時のfirewall設定が苦しみポイントでした・・・
自宅にサーバ置けない人、パブリッククラウドの従量課金制が怖い人にとっては月額低料金で気軽に使えるサービスなので、ぜひ利用してみてください!