IMPOV::In My Point Of View

仕事、SEO、ウェブマーケティング、時事問題、健康、生き方などなど、書きたいことを勝手に書き倒しているブログです。とどのつまり「便所の落書き」

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

f:id:impov:20160529193552p:plain:w200:right

今回は 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です。

次回は、ConoHa API を叩いてインフラ側で Firewall を設定します。