この記事の要点
• ssh user@hostでリモートサーバーに接続、ssh-keygenで鍵ペア生成
• ~/.ssh/configでホスト別の設定を管理、エイリアスで接続を簡略化
• -Lでローカルポートフォワーディング、-Dで SOCKS プロキシ
基本接続
| コマンド | 説明 |
|---|---|
ssh user@host | リモート接続 |
ssh -p 2222 user@host | ポート指定 |
ssh -i ~/.ssh/id_rsa user@host | 秘密鍵指定 |
ssh user@host "ls -la" | コマンド実行後に切断 |
ssh -v user@host | 詳細ログ出力 |
ssh -X user@host | X11 フォワーディング |
ポイント: -vオプションで接続トラブルの原因を確認できます。-vvや-vvvでさらに詳細なログが出ます。
鍵生成と登録
| コマンド | 説明 |
|---|---|
ssh-keygen -t ed25519 -C "email@example.com" | Ed25519 鍵ペア生成(推奨) |
ssh-keygen -t rsa -b 4096 | RSA 4096bit 鍵ペア生成 |
ssh-copy-id user@host | 公開鍵をサーバーに登録 |
ssh-add ~/.ssh/id_ed25519 | ssh-agent に秘密鍵を追加 |
ssh-add -l | ssh-agent に登録済みの鍵一覧 |
鍵生成からサーバー登録までの流れ:
| 手順 | コマンド |
|---|---|
| 1. 鍵生成 | ssh-keygen -t ed25519 -C "my-server" |
| 2. 公開鍵登録 | ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host |
| 3. 接続確認 | ssh user@host # パスワードなしで接続 |
実践メモ: Ed25519は RSA より高速で安全です。GitHub や AWS などの主要サービスでサポートされているため、新規作成時は Ed25519 を推奨します。
SSH Config ファイル
~/.ssh/config に設定を書くと接続が簡単になります(OpenSSH 7.3+ で ProxyJump が利用可能、公式: https://man.openbsd.org/ssh_config)。
Host myserver
HostName 192.168.1.100
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host *.example.com
User admin
ForwardAgent yes
Host bastion
HostName bastion.example.com
User jump
IdentityFile ~/.ssh/bastion_key
Host internal
HostName 10.0.1.50
User app
ProxyJump bastion
| 設定項目 | 説明 |
|---|---|
Host | エイリアス名 |
HostName | 実際のホスト名または IP |
User | ログインユーザー名 |
Port | SSH ポート |
IdentityFile | 秘密鍵のパス |
ForwardAgent | ssh-agent の鍵転送を有効化 |
ProxyJump | 踏み台サーバー経由で接続 |
# config 設定後は短縮できる
ssh myserver # ssh -p 2222 -i ~/.ssh/id_ed25519 deploy@192.168.1.100
ポイント: ProxyJumpで踏み台サーバー経由の接続が1コマンドで完結します。内部ネットワークへのアクセスがシンプルになります。
ファイル転送(SCP)
| コマンド | 説明 |
|---|---|
scp file.txt user@host:/path/ | ローカル→リモート |
scp user@host:/path/file.txt . | リモート→ローカル |
scp -r dir user@host:/path/ | ディレクトリ転送 |
scp -P 2222 file.txt user@host:/path/ | ポート指定(-P は大文字) |
scp -i ~/.ssh/id_rsa file.txt user@host:/path/ | 秘密鍵指定 |
scp file1.txt file2.txt user@host:/tmp/ | 複数ファイル転送 |
scp user1@host1:/path/file.txt user2@host2:/path/ | リモート間でコピー(ローカルを経由) |
注意: scpはポート指定が-P(大文字)です。ssh の-p(小文字)と異なるので注意してください。
ファイル転送(SFTP)
| コマンド | 説明 |
|---|---|
sftp user@host | SFTP 接続 |
get remote.txt | リモート→ローカル |
put local.txt | ローカル→リモート |
ls | リモートのファイル一覧 |
lls | ローカルのファイル一覧 |
cd /path | リモートのディレクトリ移動 |
lcd /path | ローカルのディレクトリ移動 |
実践メモ: sftpは対話的にファイルを選んで転送できます。大量のファイルから一部だけを取得したいときに便利です。
ポートフォワーディング
| 種類 | コマンド例 | 説明 |
|---|---|---|
| ローカルポートフォワーディング | ssh -L 8080:localhost:80 user@host | ローカル 8080 → リモート 80 ブラウザで http://localhost:8080 にアクセスすると、リモートの 80 番ポートに接続 |
| リモートポートフォワーディング | ssh -R 8080:localhost:3000 user@host | リモート 8080 → ローカル 3000 リモートサーバーの localhost:8080 にアクセスすると、ローカルの 3000 番ポートに接続 |
| SOCKS プロキシ | ssh -D 1080 user@host | ローカルに SOCKS プロキシを開始 ブラウザのプロキシ設定で localhost:1080 を指定すると、すべての通信がリモートサーバー経由になる |
ポイント: -Dで SOCKS プロキシを立てると、リモートネットワークから Web ブラウジングできます。VPN の代替としても使えます。
セッション管理
| コマンド | 説明 |
|---|---|
~. | SSH セッションを強制切断(Enter の後に入力) |
~^Z | SSH セッションをバックグラウンドに移動 |
~? | エスケープシーケンス一覧 |
ssh -o ServerAliveInterval=60 user@host | 60秒ごとにキープアライブ |
実践メモ: ServerAliveIntervalを設定すると、無操作でもセッションが切れないようにできます。長時間の作業に便利です。
known_hosts 管理
| コマンド | 説明 |
|---|---|
ssh-keygen -R host | known_hosts から特定ホストを削除 |
ssh-keygen -H | known_hosts をハッシュ化 |
ssh -o StrictHostKeyChecking=no user@host | ホスト鍵チェックをスキップ(非推奨) |
注意: StrictHostKeyChecking=noは中間者攻撃のリスクがあります。テスト環境以外では使わないでください。
トラブルシューティング
| 状況 | 対処法 |
|---|---|
| Permission denied (publickey) | 鍵のパーミッションを確認 chmod 600 ~/.ssh/id_rsa |
| Connection refused | サーバーの SSH ポートを確認 sudo systemctl status sshd |
| Host key verification failed | ssh-keygen -R host で known_hosts から削除 |
| Too many authentication failures | ssh -o IdentitiesOnly=yes -i ~/.ssh/key user@host |
パーミッション修正:
| ファイル/ディレクトリ | パーミッション | コマンド |
|---|---|---|
~/.ssh | 700 | chmod 700 ~/.ssh |
~/.ssh/id_rsa | 600 | chmod 600 ~/.ssh/id_rsa |
~/.ssh/id_rsa.pub | 644 | chmod 644 ~/.ssh/id_rsa.pub |
~/.ssh/config | 600 | chmod 600 ~/.ssh/config |
~/.ssh/known_hosts | 644 | chmod 644 ~/.ssh/known_hosts |
~/.ssh/authorized_keys | 644 | chmod 644 ~/.ssh/authorized_keys |
ポイント: SSH はパーミッションに厳しいため、~/.sshは 700、秘密鍵は 600 にします。これより緩いと接続を拒否されます。
セキュリティ設定(サーバー側)
/etc/ssh/sshd_config の推奨設定(OpenSSH 8.0+ 対応、公式: https://man.openbsd.org/sshd_config):
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 2222
AllowUsers deploy admin
| 設定項目 | 説明 |
|---|---|
PermitRootLogin no | root ログイン禁止 |
PasswordAuthentication no | パスワード認証無効化 |
PubkeyAuthentication yes | 公開鍵認証有効化 |
Port 2222 | デフォルトポート変更 |
AllowUsers | 許可ユーザーのホワイトリスト |
# 設定変更後は再起動
sudo systemctl restart sshd
注意: PasswordAuthentication noにする前に、公開鍵認証での接続を確認してください。設定ミスでロックアウトされる可能性があります。
参考リソース
- OpenSSH Manual Pages - 公式マニュアル
- SSH Config Reference - ssh_config の詳細
- SSH Security Best Practices - Mozilla のセキュリティガイドライン
関連記事
- Linux 基礎 - サーバー管理の基礎知識
- Bash チートシート - シェルコマンドのリファレンス