SSHのポート変更とセッション維持まとめ|sshd_config・nohup・screen
/ 8 min read
Table of Contents
はじめに
サーバーを公開すると、22番ポートには当たり前のように総当たり攻撃が来ます。ポート番号を変えるだけで攻撃ログは劇的に減るので、最初にやっておく価値があります。
あわせて、SSHを切ってもプロセスを動かし続ける方法もまとめました。どちらもサーバー運用の最初に必要になる話です。
SSHのポート番号を変更する
絶対に守る手順
作業の順序を間違えると、自分がサーバーに入れなくなります。クラウドのコンソールから復旧できない構成だと、インスタンスを作り直すことになりかねません。次の順序を必ず守ってください。
- ファイアウォールで新しいポートを開ける(22番はまだ閉じない)
sshd_configに新しいポートを追加する(Port 22は残す)- sshdを再起動する
- 今のセッションは切らずに、別のターミナルから新ポートで接続できるか確認する
- 接続できたら、22番を閉じる
要は「新しい入口を作って、通れることを確かめてから、古い入口を閉じる」という順序です。
sshd_config の編集
$ sudo vim /etc/ssh/sshd_configPort 22 の行を残したまま、新しいポートを追記します。
Port 22Port 50022設定を反映します。
# Ubuntu$ sudo systemctl restart ssh
# Amazon Linux など$ sudo systemctl restart sshd.service疎通確認は、今つながっているセッションを維持したまま別のターミナルから行います。
$ ssh -p 50022 ユーザー名@サーバーのIPつながることを確認できたら、sshd_config から Port 22 を削除して再起動し、ファイアウォールの22番も閉じます。
AWS Lightsail の場合
管理画面の ネットワーキング からポートを追加します。
- アプリケーション: カスタム
- プロトコル: TCP
- ポートまたは範囲: 任意のポート番号
新ポートでの接続を確認したら、ネットワーキングから22番を削除します。
GCE の場合
VPCネットワーク > ファイアウォール でルールを作成します。
- 新しいポートを許可するファイアウォールルールを作り、VMインスタンスのネットワークタグに付与する
- SSHで接続し、
sshd_configにポートを追加して再起動する - 新しいポートで接続できることを確認する
- 22番を拒否するルールをネットワークタグに追加する
- 22番で接続できないことを確認して完了
GCEはネットワークタグでルールを出し分けられるので、タグの付け外しで切り替えられます。
SSHを切ってもコマンドを動かし続ける
SSHセッションを閉じると、そこで起動したプロセスは通常終了してしまいます。継続させる方法は主に2つあります。
nohup:起動して放置する
コマンドの前に nohup、末尾に & を付けます。
$ nohup streamlit run app.py &nohup: ログアウト時のハングアップシグナルを無視する&: バックグラウンドで実行する
標準出力は自動的に nohup.out に書き出されます。出力先を指定したいときは明示します。
$ nohup streamlit run app.py > /var/log/app.log 2>&1 &プロセスを止めるときは、PIDを調べて終了させます。
# PIDを確認する$ ps -ef | grep streamlit
# 終了させる$ kill PIDscreen:あとから作業を再開する
対話的な作業を続きから再開したい場合は screen が便利です。
# 新しいスクリーンを作る$ screen
# (この中でスクリプトを実行する)
# スクリーンから抜ける(プロセスは動き続ける)Ctrl + A を押してから D戻るときは、動いているスクリーンを確認してから入り直します。
# 一覧を表示$ screen -ls
# 指定したスクリーンに戻る$ screen -r スクリーンID終了させる方法は2つあります。
# スクリーンの中から$ exit
# スクリーンの外から$ screen -X -S スクリーンID quit名前を付けておくと、複数動かしていても分かりやすくなります。
$ screen -S batch$ screen -r batchどちらを使うか
| nohup | screen | |
|---|---|---|
| 用途 | 起動して放置する | あとから作業を再開する |
| 画面の復帰 | できない | できる |
| 対話的な操作 | 向かない | 向く |
長時間かかるバッチを流しておくだけなら nohup、途中経過を見ながら作業したいなら screen という使い分けになります。
おわりに
ポート変更は単純な作業に見えますが、順序を間違えたときの被害が大きい作業でもあります。「新しい入口を確認してから古い入口を閉じる」を徹底すれば、締め出されることはありません。作業中は接続済みのセッションを閉じないでおく、というのも地味ですが効果的な保険です。
