⑨ネットワーク基礎

SSHの仕組みと公開鍵認証の設定方法【ssh-keygen・authorized_keys完全ガイド】

⑨ネットワーク基礎
記事内に広告が含まれています。

SSHはリモートサーバーに安全に接続するためのプロトコルです。パスワード認証より安全な公開鍵認証の仕組みと設定方法を解説します。サーバー管理の現場では必須の知識です。

SSHとは何か?

SSH(Secure Shell)はネットワーク越しに別のコンピューターに安全に接続してコマンドを実行するためのプロトコルです。通信はすべて暗号化されるため、パスワードやコマンドの内容が盗聴される心配がありません。ポート番号は22番を使います。

パスワード認証 vs 公開鍵認証

比較項目パスワード認証公開鍵認証
セキュリティ低い(総当たり攻撃の危険)高い(秘密鍵がないと接続不可)
利便性パスワードを覚えれば使える初回設定が必要だが以後は簡単
本番環境推奨されない標準的な方式

公開鍵認証の仕組み

  1. クライアントで秘密鍵公開鍵のペアを生成する
  2. 公開鍵をサーバーの~/.ssh/authorized_keysに登録する
  3. 接続時:サーバーがランダムなデータを秘密鍵で暗号化するよう要求する
  4. クライアントが秘密鍵で署名してサーバーに返す
  5. サーバーが公開鍵で署名を検証し、正当なクライアントと確認できれば接続を許可

公開鍵認証の設定手順

# 1. クライアント側:鍵ペアを生成(Ed25519推奨)
ssh-keygen -t ed25519 -C "your-email@example.com"
# 保存先:~/.ssh/id_ed25519(秘密鍵)、~/.ssh/id_ed25519.pub(公開鍵)

# 2. 公開鍵をサーバーに転送
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip
# または手動でサーバーに追加
cat ~/.ssh/id_ed25519.pub | ssh user@server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# 3. 接続テスト
ssh user@server-ip

# 4. サーバー側:パスワード認証を無効化(/etc/ssh/sshd_config)
sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

SSH設定ファイル(~/.ssh/config)

# ~/.ssh/config に設定を書くと接続が楽になる
Host myserver
    HostName 192.168.1.100
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Host work-server
    HostName work.example.com
    User admin
    IdentityFile ~/.ssh/work_key

# 設定後は短いコマンドで接続できる
ssh myserver

SCPでファイル転送

# ローカル→サーバー
scp /local/file.txt user@server:/remote/path/

# サーバー→ローカル
scp user@server:/remote/file.txt /local/path/

# フォルダごとコピー(-r)
scp -r /local/dir/ user@server:/remote/

まとめ

  • SSHはポート22番を使った暗号化リモート接続プロトコル
  • 公開鍵認証はパスワード認証より大幅に安全で、本番環境では必須
  • ssh-keygenでEd25519の鍵ペアを生成し、ssh-copy-idで公開鍵をサーバーに登録する
  • ~/.ssh/configに設定を書くと接続コマンドが大幅に短くなる

コメント

タイトルとURLをコピーしました