第4章 SSH クライアントの基本操作
鍵ペアの生成(ssh-keygen)
クライアント側(手元の作業 PC)で、認証に使用する公開鍵と秘密鍵のペアを生成します。
現代の SSH では、高速かつ極めて安全性の高い Ed25519 方式が強く推奨されています。
ssh-keygen -t ed25519 -C "your_name@example.com"
コマンドを実行すると、以下の対話形式で質問されます。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
-
保存場所:
特に理由がなければ Enter キーを押し、デフォルトのパス(
~/.ssh/id_ed25519)を選択します。 -
パスフレーズ:
秘密鍵を紛失した際の保護のため、英数字や記号を組み合わせた推測されにくいパスフレーズを入力します。
生成が完了すると、~/.ssh/ ディレクトリに以下の 2 つのファイルが作成されます。
id_ed25519: 秘密鍵(手元 PC で厳重に管理、誰にも渡さない)id_ed25519.pub: 公開鍵(接続先サーバへ登録する)
▸ 秘密鍵のファイル権限(Linux / macOS)
Linux や macOS では、秘密鍵のアクセス権が広すぎると SSH クライアントが警告を出して接続を拒否します。
必ず所有者のみが読み書きできる権限(600)に設定します。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
サーバへの公開鍵の登録
生成した公開鍵(id_ed25519.pub)の内容を、接続先サーバの ~/.ssh/authorized_keys に登録します。
1. Linux サーバへの自動登録(ssh-copy-id)
クライアントが Linux や macOS、WSL の場合、ssh-copy-id コマンドを使うことでワンステップで安全に登録できます。
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 username@192.168.1.100
サーバのログインパスワードを 1 度入力すると、サーバ側の ~/.ssh フォルダ作成、権限調整、および鍵の追記が自動的に完了します。
2. Windows サーバまたは手動での登録
ssh-copy-id が使用できない環境では、公開鍵の内容を直接コピーしてサーバ側のファイルに追記します。
PowerShell からリモートの Windows または Linux サーバへ転送・追記する例です。
# クライアント側で公開鍵の内容を取得
$pubKey = Get-Content ~\.ssh\id_ed25519.pub
# サーバ側の authorized_keys に追記する(SSH でコマンドを実行)
ssh username@192.168.1.100 "mkdir -p ~/.ssh && echo '$pubKey' >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
基本的な接続コマンド
公開鍵の登録後、ssh コマンドで接続テストを行います。
# 基本接続構文
ssh username@192.168.1.100
# ポート番号を変更している場合(-p オプション)
ssh -p 2222 username@192.168.1.100
# 使用する秘密鍵を明示的に指定する場合(-i オプション)
ssh -i ~/.ssh/id_ed25519 username@192.168.1.100
パスフレーズを設定している場合は、接続時にパスフレーズの入力を求められます。認証に成功すると、サーバのシェルプロンプトが表示されます。
接続を終了するには exit コマンドを実行します。
初回接続時のホスト鍵確認と known_hosts
初めてのホストへ接続する際、以下の確認メッセージが表示されます。
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ED25519 key fingerprint is SHA256:abcd1234efgh5678...
Are you sure you want to continue connecting (yes/no/[fingerprint])?
ここで yes を入力すると接続が続行され、クライアントの ~/.ssh/known_hosts に相手先サーバのホスト公開鍵が記録されます。
▸ ホスト鍵変更警告への対処
サーバを再構築した場合などに、次回接続時に以下の警告が発生することがあります。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
これは「以前記録されたホスト鍵と、現在のサーバのホスト鍵が異なる」という重大な警告です。 正規のサーバ再構築であることが確認できている場合に限り、以下のコマンドで古い鍵情報を消去して再接続します。
ssh-keygen -R 192.168.1.100
詳細ログ出力による接続トラブルシューティング
接続がうまくいかない場合、-v(Verbose: 詳細)オプションを付与して実行すると、接続・認証処理の内部ログが画面に表示されます。
# 詳細ログ(-v、さらに詳しい -vv、最も詳細な -vvv)
ssh -v -i ~/.ssh/id_ed25519 username@192.168.1.100
どの秘密鍵を試行したか、サーバからどのような認証方式が返されたか、どこで拒否されたかが明確に判別できます。
リモートコマンドの実行
SSH はインタラクティブなシェルログインだけでなく、リモートサーバ上で特定のコマンドを単発実行して結果を受け取ることができます。
# サーバのディスク使用量を確認
ssh username@192.168.1.100 "df -h"
# サーバの特定サービスの状態を確認
ssh username@192.168.1.100 "systemctl status nginx"
手元のスクリプトやバッチ処理から遠隔の作業を自動化する際に非常に重宝します。