これまで私のブログのSSHに関する記事を愛していただき、ありがとうございます。統計を見てみると多くの方がSSHに興味を持たれていますが、実際に「最初からどのように安全に構成すればよいのか?」に関する統一ガイドは不足していたようです。

SSH(Secure Shell)は単なるリモート接続ツールではありません。開発者にとってはサーバー管理の生命線であり、一般ユーザーにとってはいつでもどこでも自分のコンピュータにアクセスできる強力な武器です。

今日はSSHの基本概念を超えて、実務者の視点から必ず守るべきセキュリティ設定とノウハウをまとめて「正しく」始める方法をお伝えします。


1. SSHとは何か、なぜ必須なのか?



SSHはSecure Shellの略で、ネットワーク上の他のコンピュータにログインしたり、コマンドを実行したりファイルを転送したりすることができるプロトコルです。核心は「暗号化」です。従来のTelnetとは異なり、すべての通信内容が暗号化されて送信されるため、誰かが途中でデータを傍受しても内容を知ることはできません。

  • 開発者: AWS、Azureなどのクラウドサーバーの配布および管理に必須です。

  • 非開発者: 外部から自宅のPCやNAS、ラズベリーパイなどを安全に制御できます。

2. サーバー(リモート)設定:セキュリティの第一歩

サーバー(リモート)にopenssh-serverをインストールすることはスタートに過ぎません。インストール直後にデフォルト設定で使用することはセキュリティ上非常に脆弱です。

設定ファイルの場所はLinux基準で/etc/ssh/sshd_configです。このファイルを修正して最低限の安全装置を整える必要があります。

設定ファイルの修正: sudo nano /etc/ssh/sshd_config

実践設定1: 基本ポートの変更 (Port Change)

SSHは全世界で22番ポートを使用します。ハッカーの自動化されたボットは22番ポートに集中攻撃を仕掛けます。ポート番号を変更するだけで無差別攻撃(Brute Force)の90%以上を回避できます。

# Port 22  <-- コメントアウトまたは削除
Port 22022  # 1024以降の任意のポート番号使用推奨

実践設定2: パスワード認証の禁止 (Password Authentication No)

パスワードはいつか破られます。セキュリティレベルがはるかに高いSSHキー(キー)方式を使用する必要があり、キー設定が完了した後はパスワード接続を完全に遮断するべきです。

PasswordAuthentication no

⚠️ 注意: この設定は必ずSSHキー接続が正常に動作するか確認した後に適用する必要があります。そうでないとサーバー接続が完全にブロックされる可能性があります。

3. ローカル(クライアント)設定: キー(Key)生成と登録のノウハウ



さあ、私のPC(ローカル)からサーバーに接続する鍵を作る時が来ました。ここからは熟練者のノウハウが必要です。

ノウハウ1: 識別可能なキー生成 (-C オプション)

キーを生成する際に単にssh-keygenだけを入力しないでください。後でキーが増えると、どのキーがどこで使われているのか区別が難しくなります。必ずコメント(Comment)オプションを使用してください。

# -t ed25519: 最新の暗号化方式(速度とセキュリティに優れています)
# -C: キーファイルの末尾にコメントを付けて識別しやすくします。
ssh-keygen -t ed25519 -C "my-macbook-pro-home-server-key"

生成されたキーは~/.ssh/ディレクトリに保存されます。(id_ed25519: 秘密鍵、id_ed25519.pub: 公開鍵)

ノウハウ2: 最も簡単なキーコピー方法 (ssh-copy-id)

生成した公開鍵(pub)をサーバーに登録する必要があります。テキストをコピーして貼り付ける手間を省き、コマンド一行で済ませましょう。

# 文法: ssh-copy-id -i [公開鍵パス] [アカウント]@[サーバーアドレス] -p [ポート]
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100 -p 22022

# DNSドメインで接続されているサーバーであれば、IPの代わりにDNSを直接入れても問題ありません。あなたのルーターに設定されたDNSサーバーがIPに変換してくれます。
ssh-copy-id -i ~/.ssh/id_ed25519.pub alice@wonderland.com -p 22022

このコマンドはサーバーの~/.ssh/authorized_keysファイルに私の公開鍵を自動的に追加してくれます。

ノウハウ3: 手動登録時の注意点 (権限の問題)

もしssh-copy-idを使えない状況で手動で登録しなければならない場合、ファイル権限(Permission)に注意が必要です。SSHは権限があまりにも開かれているとセキュリティ上の理由から接続を拒否します。

サーバー接続後、ホームディレクトリで次のことを確認してください:

  1. .ssh フォルダー: 権限 700(自分だけが読み書き実行可)

  2. authorized_keys ファイル: 権限 600(自分だけが読み書き可)

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Linuxファイルシステムの権限についてもっと知りたい方はこちらをクリックして詳しく見てみましょう!

4. 接続テストと次のステップ

すべての準備が整ったら接続を試みてみます。ポートを変更したので-pオプションを使う必要があります。

ssh -p 22022 user@192.168.1.100
# LAN IPでも、WAN IPでも、DNSドメインでも問題ありません。サーバーを明確に指していることが重要です。

パスワードを尋ねずに接続できれば成功です。今すぐサーバーのsshd_configPasswordAuthentication noを設定してセキュリティを完成させましょう。


sshを利用してサーバーに接続する画像

これで皆さんは安全にサーバーを制御できる環境を整えました。しかしSSHの世界は広いです。接続を自動化し、ファイルを管理し、より強力なセキュリティツールを連携する方法を以下の記事で引き続き学んでみてください。

📖 一緒に読むと良い深堀ガイド

  1. SSH使用法: コマンド作成から便利なオプションまで完全攻略!

  2. SSH接続自動化の第一歩: configファイルマスターする

  3. SSHリバースポートフォワーディング: 外部から内部に接続する魔法(feat. -Rオプション)

  4. SSH keygen: 初心者のための完全ガイド

  5. ターミナルなしでSSHでサーバーファイル管理する: SFTPとGUIファイルエクスプローラー活用!

  6. Linuxサーバーを守る守護者、Fail2Ban


次のポストでは多くの方が混乱されているSSH Configファイルを使って、複雑なオプションなしに単語一つでサーバーに接続する方法が非常に便利で、上記の2番目の記事で扱っています。それ以外にも役立つ他の投稿も参考にしてください!