huruyosi’s blog

プログラミングとかインフラとかのメモです。

鍵認証を行い、sshのポート番号を変更する

やりたいこと

  1. パスワード認証を無効化して、鍵認証のみを有効にします。

  2. sshdのポート番号を変更します。

環境

  • さくらVPSに CentOS 7.0 を Minimal Install しました。
  • クライアントはteratermを利用します。
  • SSHでリモートログインが行えます。
  • ファイヤーウォールの設定は下の状態です。
$ sudo firewall-cmd --list-all
[sudo] password for xxxxxxx:

public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

鍵作成

  1. Teratermの「設定」->「SSH鍵作成」を選択します。
  2. 鍵の種類に「RSA」を指定し、ビット長を4096に変更して、「生成」ボタンを押します。 1.「鍵のパスフレーズ」、「パスフレーズの確認」を入力可能になったら、秘密鍵パスフレーズを入力します。
  3. 「公開鍵の保存」と「秘密鍵の保存」をそれぞれ押して、公開鍵と秘密鍵をそれぞれ保存します。

公開鍵をサーバに転送

  1. 公開鍵を保存するフォルダを作成します。
$ mkdir ~/ssh
$ chmod 700 ~/ssh
  1. 公開鍵をサーバに転送するために、Teratermの「ファイル」->「 SSH SCP」を選択します。

f:id:huruyosi:20150103124617p:plain

上側の「From:」に作成した公開鍵を指定し、「To:」に~/.ssh/authorized_keysを指定した後に、「Send」を押してファイルを転送します。

  1. 転送した公開鍵のパーミッションを変更します。
$ chmod 700 ~/.ssh/authorized_keys

公開鍵でのログインを確認

転送した公開鍵でログインがおこなえることを確認します。ログインに失敗する場合には /var/log/secureに出力されたログをみて原因を判断します。

  • ~/.ssh/authorized_keysに公開鍵が保存されていることを確認します。テキストファイルなので cat ~/.ssh/authorized_keysで中身をみます。

  • 転送した公開鍵のファイル~/.ssh/authorized_keysパーミッションが700(-rwx------)になっていることを確認します。

sshdのポート番号とファイヤーウォールの設定変更

ファイヤーウォールが変更後のポートを通るパケットを許可する

  1. cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-custom.xmlを実行して、ポート番号を変更したsshのサービスを定義します。
  2. /etc/firewalld/services/ssh-custom.xmlを編集し、shortのサービス名とportタグポート番号を変更します。
  3. sudo firewall-cmd --reloadを実行して、サービスの追加を反映します。
  4. firewall-cmd --get-services を実行して、ssh-customが追加されていることを確認します。
  5. sudo firewall-cmd --add-service=ssh-custom --zone=public --permanent を実行してポート番号を変更したsshのサービスをpublicゾーンに追加します。
  6. sudo firewall-cmd --reloadを実行して、publicゾーンへの反映を有効にします。
  7. sudo firewall-cmd --list-allを実行して、pubilcゾーンに追加されたことを確認します。
  8. 念のためにiptables -L -nでも確認します。

変更したポート番号でのログインを確認する

接続済みのsshは残しておき、新たなTeratermを起動して、変更後のポート番号でsshのログインが行えることを確認します。

sshの設定を変更する

/etc/ssh/sshd_configを編集します。

  1. Port 22を有効にしてポート番号を変更します。
  2. PubkeyAuthentication yesを有効にします。
  3. PasswordAuthentication yesを無効にします。

最後にsudo systemctl restart sshdsshdを再起動します。起動しない場合にはjournalctl -xnで原因を判断します。error: Bind to port xx22 on 0.0.0.0 failed: Permission denied.とメッセージが出ている場合には SELinuxが効いています。

22番ポートを閉じる

  1. sudo firewall-cmd --remove-service=ssh --zone=public --permanentでpublicゾーンからsshのサービスを削除します。
  2. sudo firewall-cmd --reloadを実行して、publicゾーンへの反映を有効にします。
  3. sudo firewall-cmd --list-allを実行して、pubilcゾーンに追加されたことを確認します。
$ sudo firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh-custom
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

22番ポートではログインできないことを確認する

新たなTeratermを起動して、22番ポートを指定しログインを試みます。試すとタイムアウトして、失敗します。