SSH のポートを変更する - ConoHa で KUSANAGI その3

今回は SSH のポート番号を 22番から別の番号へ変更します。
ポート番号は 61000 以下の数字を適当に決めれば良いと思います。若い番号だと指定済みのほかのサービスと被ることがあります。不安な方は「TCPやUDPにおけるポート番号の一覧 - Wikipedia」でもみて番号がかぶってないか確認してみてください。
ここでは、55555番へ変更することにします。
root アカウントでサーバーに接続して作業を行います。
sshd の設定ファイルを変更する
sshd の設定ファイルを以下の要領で変更し保存後、SSHD を再起動します。
vim /etc/ssh/sshd_config
#Port 22 ←コメントを外し、さらに次の行にポート番号を追加する
↓
Port 22
Port 55555
#Protocol 2 ←コメントを外す
↓
Protocol 2
#PermitRootLogin yes #rootログイン禁止
↓
PermitRootLogin no
#PubkeyAuthentication yes #公開鍵接続可能にする(ConoHaの設定であらかじめ コメントがはずれていると思います。しかも2行あったりするので、1つは削除する。)
↓
PubkeyAuthentication yes
PasswordAuthentication yes #パスワードログインを禁止
↓
PasswordAuthentication no
#SSH再起動
systemctl restart sshd.service
これで、root での ssh ログインができなくなります。また、公開鍵接続以外での SSH ログインもできなくなります。
新しいポート 55555 を設定しましたが、55555 で接続ができることを確認するまで、22番は残しておきます。22番と55555番の両方を書いておけば、両方ともアクセスできます。
なお、この時に設定をミスして接続ができなくなってしまっても ConoHa の管理画面のコンソール経由なら、root でパスワードログインすることができます。
ConoHa がイメージをインストールするときに気を利かせたのだと思いますが、PubkeyAuthentication yes など複数のパラメータが重複して設定されてしまっているようです。
同じことが2行書いてあっても問題なく動きますが、気持ち悪いので重複したコードが書かれている行は削除してお掃除してしまいましょう。
このあと、作業用ユーザーで接続の確認を行いますが、万が一うまく接続できなくなった時を考えて、現在接続している root アカウントのターミナルは接続したままにしておきます。
作業用ユーザーでログイン確認
接続している root アカウントのターミナルとは別プロセスで、作業用ユーザーで SSH 接続をしてみます。
このとき、ポートは新しく設定した 55555 を指定します。また、前回作成した秘密鍵を使用して接続します。
ご参考までにテラタームマクロは以下のとおりです。このマクロでは、作業用ユーザーでログインしたら自動的に su - コマンドを打って root に成り上がるようにしています。複数人でサーバー管理している場合は、su - はやめて sudo しましょう。
拡張子 .ttl にして保存して利用できます。例によってマクロファイルと秘密鍵は同じディレクトリに保存し、また、TeraTermLog という空のディレクトリを作っておいて下さい。
※公開鍵にパスフレーズを設定した場合
getdir MACRODIR HOSTADDR = '987.654.321.098' USERNAME = 'tsuyoshi' PASSWORD = '秘密鍵のパスフレーズ' ROOTPASS = 'root アカウントのパスワード' KEY_FILE = MACRODIR strconcat KEY_FILE '\tsuyoshiの秘密鍵.pem' PORTNUM = '55555' LOGDIR = MACRODIR strconcat LOGDIR '\TeraTermLog\' COMMAND = HOSTADDR strconcat COMMAND ':' strconcat COMMAND PORTNUM strconcat COMMAND ' /ssh /2 /auth=publickey /user=' strconcat COMMAND USERNAME strconcat COMMAND ' /passwd=' strconcat COMMAND PASSWORD strconcat COMMAND ' /keyfile=' strconcat COMMAND '"' strconcat COMMAND KEY_FILE strconcat COMMAND '"' connect COMMAND LOGFILE = LOGDIR strconcat LOGFILE USERNAME strconcat LOGFILE '@' strconcat LOGFILE HOSTADDR getdate DATETIME '-%Y%m%d-%H%M%S' strconcat LOGFILE DATETIME strconcat LOGFILE '.log' logopen LOGFILE 0 1 timeout = 10 wait '$' '#' if result = 0 end sendln 'su -' wait ':' sendln ROOTPASS end
※公開鍵にパスフレーズを設定していない場合
getdir MACRODIR HOSTADDR = '987.654.321.098' USERNAME = 'tsuyoshi' ROOTPASS = 'root アカウントのパスワード' KEY_FILE = MACRODIR strconcat KEY_FILE '\tsuyoshiの秘密鍵.pem' PORTNUM = '55555' LOGDIR = MACRODIR strconcat LOGDIR '\TeraTermLog\' COMMAND = HOSTADDR strconcat COMMAND ':' strconcat COMMAND PORTNUM strconcat COMMAND ' /ssh /2 /auth=publickey /user=' strconcat COMMAND USERNAME strconcat COMMAND ' /keyfile=' strconcat COMMAND '"' strconcat COMMAND KEY_FILE strconcat COMMAND '"' connect COMMAND LOGFILE = LOGDIR strconcat LOGFILE USERNAME strconcat LOGFILE '@' strconcat LOGFILE HOSTADDR getdate DATETIME '-%Y%m%d-%H%M%S' strconcat LOGFILE DATETIME strconcat LOGFILE '.log' logopen LOGFILE 0 1 timeout = 10 wait '$' '#' if result = 0 end sendln 'su -' wait ':' sendln ROOTPASS end
接続が確認できたら、sshd の設定ファイルの port 22 をコメントアウトし sshd を再起動しましょう。
vim /etc/ssh/sshd_config
Port 22 #コメントアウトする
↓
# Port 22
#SSH再起動
systemctl restart sshd.service
これで開きっぱなしにしていた root ログインのターミナルは閉じてOKです。