SSHはリモートサーバーに安全に接続するためのプロトコルです。パスワード認証より安全な公開鍵認証の仕組みと設定方法を解説します。サーバー管理の現場では必須の知識です。
SSHとは何か?
SSH(Secure Shell)はネットワーク越しに別のコンピューターに安全に接続してコマンドを実行するためのプロトコルです。通信はすべて暗号化されるため、パスワードやコマンドの内容が盗聴される心配がありません。ポート番号は22番を使います。
パスワード認証 vs 公開鍵認証
| 比較項目 | パスワード認証 | 公開鍵認証 |
|---|---|---|
| セキュリティ | 低い(総当たり攻撃の危険) | 高い(秘密鍵がないと接続不可) |
| 利便性 | パスワードを覚えれば使える | 初回設定が必要だが以後は簡単 |
| 本番環境 | 推奨されない | 標準的な方式 |
公開鍵認証の仕組み
- クライアントで秘密鍵と公開鍵のペアを生成する
- 公開鍵をサーバーの
~/.ssh/authorized_keysに登録する - 接続時:サーバーがランダムなデータを秘密鍵で暗号化するよう要求する
- クライアントが秘密鍵で署名してサーバーに返す
- サーバーが公開鍵で署名を検証し、正当なクライアントと確認できれば接続を許可
公開鍵認証の設定手順
# 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 sshdSSH設定ファイル(~/.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 myserverSCPでファイル転送
# ローカル→サーバー
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に設定を書くと接続コマンドが大幅に短くなる


コメント