1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今さら人に聞けないSSHのセキュリティ対策

Last updated at Posted at 2025-06-07

SSHのセキュリティ対策

SSH(Secure SHell)は、ネットワーク経由でコンピュータを操作するためのもっとも基本的な接続方法です。
大変便利である一方で、不正ログインなどセキュリティ上の大きなリスクともなりえます。そこでSSHにはセキュリティを高めるための仕組みが備えられています。
そのなかで代表的なものが「SSH公開鍵認証」と「SSHポート番号変更」です。

SSH公開鍵認証とは

SSH公開鍵認証とはSSH接続のユーザー認証に公開鍵認証を用いることで不正ログインを防ぐ手法です。

キーペアの生成

まずは公開鍵認証のために必要なキーペアを生成します。キーペアの生成にはssh-keygenコマンドを使用します。暗号化アルゴリズムは様々なものから選べますが、現在の主流はED25519です。
ssh-keygenコマンドの主なオプションは以下のようになります。

$ ssh-keygen -t <鍵タイプ> -C <コメント> -f <鍵ファイル名>

例)

$ ssh-keygen -t ed25519 -C "My Private Key" -f my_private_key

このコマンドを実行するとカレントディレクトリに、my_private_keyとmy_private_key.pubというキーペアが生成されます。my_private_keyが秘密鍵でmy_private_key.pubが公開鍵です。ちなみに-Cオプションで指定したコメントはmy_private_key.pubファイルの末尾に付与されます。

鍵ファイルの設置

まず、秘密鍵をホームディレクトリ配下の.sshディレクトリに移動します。

$ mv my_private_key ~/.ssh

つぎに、公開鍵をサーバーに登録します。公開鍵の登録には、ssh-copy-idコマンドを使います。

$ ssh-copy-id -i <鍵ファイル名> <ユーザー名>@<サーバーのホスト名>

例)

$ ssh-copy-id -i my_private_key user@host

これで、鍵ファイルの設置は完了となります。

公開鍵認証を使ったログイン

公開鍵認証を使ってログインするときは、sshコマンドに-iオプションで鍵ファイルを指定します。
例)

$ ssh -i ~/.ssh/my_private_key user@host

パスワード認証を無効化する

公開鍵認証でログインできるようになったので、パスワード認証は無効化します。サーバーにログインして、サーバー側のSSHdの設定を変更します。

/etc/ssh/sshd_config
#PasswordAuthentication yes
PasswordAuthentication no

変更を反映するためSSHdを再起動します。

$ sudo systemctl restart sshd

これで鍵ファイルなしにはログインできなくなりました。

鍵ファイルは「絶対に」なくさないように気をつけてください!!
なくしてしまうとリモートログインが不可能になり、ローカルログインして設定を解除しなければならなくなります。

SSHポート番号の変更

SSHは標準で22番ポートを使うことが決まっています。そのため、標準の状態のまま使用すると22番ポートを決め打ちにしたブルートフォースアタックがリスクとなります。そこで、SSHで利用するポートを独自のものに変更します。

ファイアウォールのポート開放

まず、ファイアウォールを設定してSSHで新たに使用したいポートをあらかじめ解放しておきます。
ここでは5432番ポートを解放します。Firewalldの場合、次のようにします。

$ sudo firewall-cmd --zone=public --add-port=5432 --permanent
$ sudo firewall-cmd --reload

SSHdの設定変更

つぎに、サーバーにログインしてSSHdの設定を変更します。

/etc/ssh/sshd_config
#Port 22
Port 5432

ここでは、さきにポート開放したのと同じ5432番ポートを、SSHで用いるように設定を変更しています。
設定を反映するためにSSHdを再起動します。

$ sudo systemctl restart sshd

これで、5432番ポートを使ってSSH通信を行うようになりました。

ログイン

ポート番号を指定してSSH接続するにはsshコマンドに-pオプションを使います。

$ ssh -p 5432 user@host

SSH公開鍵認証をすでに設定している場合は、-iオプションで鍵認証も付け加えてください。(下記「合わせ技」を参照)

22番ポートの閉鎖

最後に、使用しなくなった22番ポートをファイアウォールで閉鎖します。

$ sudo firewall-cmd --zone=public --remove-service=ssh --permanent
$ sudo firewall-cmd --reload

ここで--remove-service=sshとなっていますが、実際にしていることは22番ポートを閉じているだけですので安心してください。

合わせ技

SSH公開鍵認証とSSHポート番号変更は併用することができます。
例)

$ ssh -i ~/.ssh/my_private_key -p 5432 user@host

これによりSSH接続がぐっと安全なものになります。

configファイルの活用

ここまで読んで、「いちいち-iオプションと-pオプション指定するの面倒くさい」と思った方も多いと思います。そこで登場するのがconfigファイルです。ホームディレクトリ配下の.sshディレクトリ内にconfigというファイルを用意します。
configファイルの書式は以下のとおりです。

~/.ssh/config
Host <登録名>
  User <ユーザー名>
  HostName <ホスト名>
  IdentityFile <鍵ファイル名>
  Port <ポート番号>

例)

~/.ssh/config
Host myhost
  User user
  HostName host
  IdentityFile ~/.ssh/my_private_key
  Port 5432

このようなファイルを用意しておくと、SSH接続するとき

$ ssh myhost

と入力するだけでサーバーと接続できるようになり非常に操作が楽になります。

まとめ

今回は、SSHを安全に使うための設定として、「SSH公開鍵認証」と「SSHポート番号変更」の2つを紹介しました。この2つを組み合わせることにより、SSH接続の安全性は大きく向上します。サーバーを不正ログインから守るため、この記事が少しでもお役に立てば幸いです。
それでは、よいSSHライフを。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?