ssh コマンドは、リモートサーバに暗号化された通信でログインしたり、コマンドを実行したりするためのコマンドです。
パスワード認証だけでなく、公開鍵認証での接続、踏み台サーバ(ジャンプホスト)経由の接続、ポートフォワーディングなど、サーバ運用には欠かせない機能を持っています。
基本の構文は
ssh [オプション] [ユーザ名@]ホスト名 [コマンド]
です。コマンドを省略するとシェルログイン、指定するとそのコマンドだけ実行して終了します。
ssh [オプション] [ユーザ名@]ホスト名ssh [オプション] [ユーザ名@]ホスト名 コマンド
最も基本的な形は ssh ユーザ名@ホスト名 で、指定したユーザとしてリモートホストにログインします。
オプションを組み合わせることで、
- 接続ポートの変更(
-p) - 秘密鍵ファイルの指定(
-i) - 踏み台サーバ経由の接続(
-J) - ポートフォワーディング(
-L、-R) - バックグラウンドでの待ち受け(
-f、-N)
などを柔軟に制御できます。
・リモートサーバへログインする(基本)
ssh sooota@example.com
sooota ユーザで example.com にログインします。
ユーザ名@ を省略した場合は、ローカルのログインユーザ名がそのまま使われます。
・ユーザ名をオプションで指定して接続する(-l)
ssh -l sooota example.com
-l ユーザ名 でログインユーザを指定することもできます。
ssh sooota@example.com と同じ意味ですが、スクリプトでユーザ名を変数にしたいときなどに使うことがあります。
・デフォルト以外のポートで ssh 接続する(-p)
ssh -p 2222 sooota@example.com
SSH のデフォルトポートは 22 番ですが、セキュリティポリシー等で変更している環境では -p で接続ポートを指定します。
ファイアウォールや踏み台サーバの設定と合わせて確認が必要です。
・秘密鍵ファイルを指定して接続する(-i)
ssh -i ~/.ssh/id_rsa_app sooota@app.example.com
-i 秘密鍵ファイル で、使用する秘密鍵を明示的に指定します。
接続先ごとに鍵を分けて運用している場合や、デフォルトと異なるファイル名の鍵を使う場合に利用します。
・踏み台サーバ(ジャンプホスト)経由で接続する(-J)
ssh -J bastion.example.com sooota@app.internal
-J ジャンプホスト(ProxyJump)は、踏み台サーバを経由して内部サーバに接続するためのオプションです。
この例では、まず bastion.example.com に接続し、そこから app.internal へ SSH で接続します。
従来の ProxyCommand よりも設定が簡単で、~/.ssh/config と合わせて使うことが多いです。
・リモートでコマンドを 1 回だけ実行する
ssh sooota@example.com "uname -a"
ログインシェルを開かず、指定したコマンドだけを実行して終了させたい場合は、ホスト名の後ろにコマンドを書きます。
短い確認作業や、スクリプトからの実行でよく使うパターンです。
・ローカルポートフォワードで Web をトンネルする(-L)
ssh -L 8080:localhost:80 sooota@web.example.com
-L ローカルポート:宛先ホスト:宛先ポート で、ローカルポートフォワードを設定します。
この例では、ローカルの 8080 にアクセスすると、SSH トンネル経由で web.example.com:80 にアクセスします。
ファイアウォール内側の HTTP サービスを手元から確認したい場合などに便利です。
・データベースへの接続を SSH トンネル経由にする(-L / -f / -N)
ssh -f -N -L 3307:localhost:3306 dbuser@db.example.com
-N はリモートコマンドを実行せず、「ポートフォワード専用」で接続するオプションです。
-f を付けると、認証後にバックグラウンドへ移行します。
この例ではローカルの 3307 を、リモートの localhost:3306(MySQL など)へトンネルし、
ローカルから 127.0.0.1:3307 に接続することで安全に DB へアクセスできます。
・接続前後のログを詳しく見てトラブルシュートする(-v)
ssh -v sooota@example.com
-v は詳細なデバッグ情報を出力します。
さらに -vv、-vvv と v を増やすことで、より詳細なログを出すことができます。
接続エラー時や、どの鍵が試されているか確認したいときに有用です。
・StrictHostKeyChecking の挙動を一時的に変更する(-o)
ssh -o StrictHostKeyChecking=no sooota@newhost.example.com
-o オプション名=値 で、~/.ssh/config に書くような設定をコマンドラインから指定できます。
CI 環境などでホストキー確認をインタラクティブにしたくない場合に、StrictHostKeyChecking=no を一時的に指定することがありますが、
セキュリティリスクもあるため、本番運用では慎重に使用してください。
・パスワード入力を禁止して公開鍵のみ許可されたサーバで接続する例(設定側)
ssh コマンドそのものではありませんが、接続先サーバ側で PasswordAuthentication no と設定し、
ssh 接続は公開鍵認証に統一するのが、運用では一般的です。
クライアント側では ssh -i 鍵ファイル と ~/.ssh/config を組み合わせて、
「コマンドはシンプル、裏側は鍵で安全に」という形にしておくと運用しやすくなります。
・リモートサーバへの日常的なログイン
Linux サーバ運用では、ほぼすべての作業が ssh 経由で行われます。
ユーザごとの鍵管理や、~/.ssh/config の整備は、長期運用を楽にするための基本です。
・踏み台サーバ経由の多段接続
直接インターネットから見えないサーバへは、踏み台サーバ(bastion)経由で接続する構成が一般的です。
-J や ProxyJump を覚えておくと、ssh のコマンドだけで多段接続が完結します。
・DB や管理 Web への安全なトンネル接続
DB 管理ツールや Web コンソールをインターネットに直接公開せず、SSH トンネル経由でだけアクセスできるようにするのは、
シンプルで効果の高いセキュリティ対策です。
ssh -L と -N の組み合わせは、ぜひ手に馴染ませておきたいところです。
・接続トラブル時の原因切り分け
「鍵が違うのか」「ホストキーが変わったのか」「そもそも疎通できていないのか」など、
ssh 接続にまつわる問題は、ssh -v のログを見ていくことでかなりの部分を切り分けできます。
ssh はオプションが多く見えますが、-p / -i / -J / -L / -R / -f / -N / -v / -o あたりを押さえておくだけでも、
日常運用で困る場面はかなり減ります。
細かい設定は ~/.ssh/config に寄せつつ、コマンドはシンプルに保つ運用がオススメです。
| short option | long option | description |
|---|---|---|
| -p | 接続先 SSH ポート番号を指定する(デフォルトは 22) | |
| -i | 使用する秘密鍵ファイル(identity file)を指定する | |
| -l | ログインユーザ名を明示的に指定する | |
| -F | デフォルトではない ssh 設定ファイル(ssh_config)を指定する | |
| -v | 詳細なデバッグメッセージを表示する(-vv や -vvv でさらに詳細) | |
| -q | 警告や情報メッセージを抑制して静かに実行する | |
| -C | 圧縮を有効にして通信量を削減する | |
| -N | リモートコマンドを実行せずポートフォワード専用で接続する | |
| -f | 認証完了後にバックグラウンドへ移行して実行する | |
| -T | 擬似端末(tty)を割り当てない(対話不要な実行向け) | |
| -t | 擬似端末を強制的に割り当てる(sudo など対話的コマンド実行向け) | |
| -L | ローカルポートフォワードを設定する([bind_address:]port:host:hostport) | |
| -R | リモートポートフォワードを設定する([bind_address:]port:host:hostport) | |
| -J | 踏み台サーバ(ジャンプホスト)経由で接続する(ProxyJump) | |
| -A | 認証エージェントのフォワーディングを有効にする | |
| -a | 認証エージェントのフォワーディングを無効にする | |
| -X | X11 フォワーディングを有効にする(信頼レベルは低い扱い) | |
| -Y | 信頼された X11 フォワーディングを有効にする | |
| -4 | IPv4 のみを使用して接続する | |
| -6 | IPv6 のみを使用して接続する | |
| -o | ssh_config に書くような設定を「オプション名=値」の形式で指定する(例: -o StrictHostKeyChecking=no) | |
| -h | ssh コマンドの簡易ヘルプを表示して終了する | |
| --version | ssh コマンドのバージョン情報を表示して終了する(--version など実装依存) |
ここでは、OpenSSH の ssh コマンドで一般的によく使われる主なオプションだけを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、バージョンやディストリビューションによって異なる場合があるため、
本番環境で使用する前に man ssh で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
