ネットワーク

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 [email protected]
# ポートを指定して接続
ssh -p 2222 [email protected]
# 秘密鍵を指定して接続
ssh -i ~/.ssh/my_key.pem [email protected]
# リモートでコマンドを実行して終了
ssh [email protected] "ls -la /var/log/"

鍵認証のセットアップ

# 鍵ペアを生成(Ed25519 推奨)
ssh-keygen -t ed25519 -C "[email protected]"

# 公開鍵をサーバーに登録
ssh-copy-id [email protected]

# 手動で登録する場合
cat ~/.ssh/id_ed25519.pub | ssh [email protected] "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 [email protected]
# → ブラウザで http://localhost:8080 にアクセスするとリモートの80番に繋がる
# フォワーディングのみ(バックグラウンド実行)
ssh -fNL 8080:localhost:80 [email protected]

SCP でファイルコピー

# ローカル → リモート
scp file.txt [email protected]:/home/user/

# リモート → ローカル
scp [email protected]:/home/user/file.txt ./

# ディレクトリごとコピー
scp -r ./mydir/ [email protected]:/home/user/

CTF での使い方

# 指定ポートに SSH 接続(CTFでは22番以外も多い)
ssh -p 31337 [email protected]

# 秘密鍵ファイルが与えられた場合
chmod 600 given_key
ssh -i given_key [email protected]

接続できないときの調査

# -v でデバッグ情報を出す(接続失敗の原因調査に)
ssh -v [email protected]

# 秘密鍵のパーミッション確認(600 でないと拒否される)
ls -la ~/.ssh/id_ed25519