ネットワーク
ssh
リモートホストに暗号化された接続でログインするプロトコル・コマンド。サーバー管理の基本
SYNTAX
ssh [options] [user@]host [command] 主なオプション
| オプション | 説明 |
|---|---|
-p <port> | 接続先ポートを指定(デフォルト: 22) |
-i <keyfile> | 秘密鍵ファイルを指定 |
-l <user> | ログインユーザーを指定(user@host 形式でも可) |
-L <local>:<host>:<remote> | ローカルポートフォワーディング |
-R <remote>:<host>:<local> | リモートポートフォワーディング |
-D <port> | SOCKS プロキシとしてダイナミックフォワーディング |
-N | コマンドを実行せず転送のみ(フォワーディングに使う) |
-f | バックグラウンドで実行 |
-v | デバッグ出力(接続失敗時の調査に) |
-T | 疑似端末を割り当てない |
-A | 鍵エージェント転送を有効にする |
使用例
基本的な接続
# ユーザー名とホスト名で接続
ssh user@example.com
# ポートを指定して接続
ssh -p 2222 user@example.com
# 秘密鍵を指定して接続
ssh -i ~/.ssh/my_key.pem user@example.com
# リモートでコマンドを実行して終了
ssh user@example.com "ls -la /var/log/"
鍵認証のセットアップ
# 鍵ペアを生成(Ed25519 推奨)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 公開鍵をサーバーに登録
ssh-copy-id user@example.com
# 手動で登録する場合
cat ~/.ssh/id_ed25519.pub | ssh user@example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
~/.ssh/config による設定の簡略化
# ~/.ssh/config に書いておくと ssh myserver だけで接続できる
Host myserver
HostName example.com
User deploy
Port 2222
IdentityFile ~/.ssh/deploy_key
# 上記設定後
ssh myserver
ポートフォワーディング
# ローカル 8080 番でリモートの 80 番にアクセス
ssh -L 8080:localhost:80 user@example.com
# → ブラウザで http://localhost:8080 にアクセスするとリモートの80番に繋がる
# フォワーディングのみ(バックグラウンド実行)
ssh -fNL 8080:localhost:80 user@example.com
SCP でファイルコピー
# ローカル → リモート
scp file.txt user@example.com:/home/user/
# リモート → ローカル
scp user@example.com:/home/user/file.txt ./
# ディレクトリごとコピー
scp -r ./mydir/ user@example.com:/home/user/
CTF での使い方
# 指定ポートに SSH 接続(CTFでは22番以外も多い)
ssh -p 31337 user@challenge.ctf.io
# 秘密鍵ファイルが与えられた場合
chmod 600 given_key
ssh -i given_key user@challenge.ctf.io
接続できないときの調査
# -v でデバッグ情報を出す(接続失敗の原因調査に)
ssh -v user@example.com
# 秘密鍵のパーミッション確認(600 でないと拒否される)
ls -la ~/.ssh/id_ed25519