前回の投稿では、SSHキーの作成(key generation)を通して、安全なSSH接続の準備を整えました。
前回の投稿を見る : SSH keygen: 初心者のための完全ガイド
今回はいよいよ、SSHでリモートサーバーに接続する基本を学びます。SSHコマンド自体は思っているよりシンプルですが、いくつかの原則と便利なオプションを知っておくと、作業がぐっと快適になります。
SSHコマンドはどう書けばいい?
SSHコマンドの基本形は次の通りです。
ssh [オプション] [ユーザー名]@[ホストアドレス] [コマンド]
それぞれが何を意味するのか、順番に見ていきましょう。
ssh:SSHクライアントを起動するコマンドです。[オプション]:接続方法を調整するための指定です。鍵ファイルの選択、ポートの指定、ポートフォワーディングなどができます(後で詳しく紹介します)。[ユーザー名]:接続先(リモートサーバー)のユーザー名です。ローカルと同じユーザー名で接続する場合は省略できることがあります。[ホストアドレス]:接続先のIPアドレスまたはドメイン名です。[コマンド](任意):接続後すぐにリモート側で実行したいコマンドがある場合に指定します。コマンドが実行されるとSSHセッションは終了します。省略すると、ログインして対話型シェル(シェル操作)を行えます。
覚えやすいコツ:SSHコマンドの「芯」
SSHコマンドの核心はとてもシンプルです。
-
基本原則:
ssh ユーザー名@ホストアドレス -
例:
ssh ubuntu@192.168.1.100(192.168.1.100のubuntuユーザーとして接続) - 例:
ssh root@mywebserver.com(mywebserver.comのrootユーザーとして接続) -
覚え方:
- 「誰として(ユーザー名)、どこへ(ホスト)入るか」だけをまず押さえる。
ssh(接続する)→ユーザー名@(誰として)→ホスト(どこへ)
また、よく使う接続先は ~/.ssh/config を使うと、長いアドレスやオプションを毎回入力しなくて済みます(この話は次回の記事で詳しく取り上げます)。
便利なSSHオプションを解剖する
SSHには用途に応じて使える便利なオプションが多数あります。ここでは実務でもよく登場するものを中心に紹介します。

1. -i <IdentityFile>:使う秘密鍵ファイルを指定する
複数のSSHキーを使い分けているとき、接続先ごとに「この鍵で接続したい」を明示するために使います。通常は ~/.ssh/id_rsa や ~/.ssh/id_ed25519 が使われますが、鍵を複数管理する場合は -i が便利です。
- 使い方:
ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com - 例:
ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
Enter passphrase for key '/home/youruser/.ssh/id_ed25519_my_server':
2. -p <Port>:SSHポートを指定する
SSHサーバーの標準ポートは22番ですが、セキュリティ上の理由で別ポートに変更して運用されていることも多いです。その場合は -p でポート番号を指定して接続します。
- 使い方:
ssh -p 2222 your_user@your_server.com - 例:
ssh -p 2222 myuser@192.168.1.100
The authenticity of host '192.168.1.100:2222 (...)' can't be established.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.100:2222' (ED25519) to the list of known hosts.
Last login: Mon Jun 17 10:00:00 2024 from your_ip
myuser@server:~ $
3. -X:X11フォワーディングを有効にする(GUIアプリを表示する)
リモートサーバー上でGUIアプリを起動し、その画面をローカルに表示して操作したい場合に使います。X Window System を利用するため、ローカル側でもXサーバーが必要です(macOSならXQuartz、WindowsならPuTTY + VcXsrvなど)。
- 使い方:
ssh -X your_user@your_server.com - 例:
ssh -X myuser@remote-gui-server.com
myuser@remote-gui-server:~ $ firefox &
リモートで起動した firefox のウィンドウがローカルに表示されます。ネットワーク遅延が大きい環境では操作が重く感じることがあります。
4. -L <LocalPort>:<RemoteHost>:<RemotePort>:ローカルポートフォワーディング(Local Port Forwarding)
ローカル側のポート(LocalPort)に入ってきた通信を、SSHトンネルを通じてリモート側(RemoteHost:RemotePort)へ転送する機能です。ファイアウォールの内側にあるサービスへ安全に到達したい場合や、ローカルのアプリからリモートDBへ接続したい場合などに活躍します。
-
使い方:
ssh -L 8080:localhost:80 your_user@your_server.com -
ローカルの
8080番に来た通信を、your_server.com上のlocalhost:80(= サーバー自身の80番)へ転送します。 -
例:
-
リモートのWebサーバー(80番)に直接アクセスできないが、SSHは可能な場合:
ssh -L 8080:localhost:80 myuser@my_web_server.com
この状態でローカルのブラウザから http://localhost:8080 を開くと、実際には my_web_server.com の80番へアクセスしているのと同じ結果になります。
- ローカルの
my_db_appが、リモート内部ネットワークのdb_server.internal:3306(MySQL)へ接続する必要があるが、db_server.internalへはmy_app_server.comからしか到達できない場合:
ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com
このトンネルを張った後、ローカルの my_db_app が localhost:3307 に接続すれば、my_app_server.com を経由して db_server.internal:3306 に到達します。
(3307 を使うのは、ローカルで 3306 を既に使用している可能性があるためです。)
5. -N:リモートでコマンドを実行せず、トンネルだけを維持する
-L や -D(Dynamic Port Forwarding / SOCKSプロキシ)と組み合わせて使い、「ログインして操作する」のではなく「フォワーディング用トンネルだけを張り続ける」用途で便利です。
- 使い方:
ssh -N -L 8080:localhost:80 your_user@your_server.com - 例:
ssh -N -L 8080:localhost:80 myuser@my_web_server.com &
バックグラウンド(&)でトンネルを維持し、ローカルのブラウザからアクセスできる状態を保てます。
6. -f:接続後にSSHプロセスをバックグラウンドへ送る
SSH接続が確立した後、クライアントプロセスをバックグラウンドへ送ります。-N と組み合わせて、ポートフォワーディングを常駐させたいときによく使います。
- 使い方:
ssh -f -N -L 8080:localhost:80 your_user@your_server.com - 例:
ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com
実行するとすぐにターミナル操作が戻り、SSHトンネルはバックグラウンドで動き続けます。ps aux | grep ssh などでプロセスを確認できます。
まとめ
今回はSSHコマンドの基本構造と、実務でよく使う主要オプションを整理しました。特に -p によるポート指定と -L によるポートフォワーディングは登場頻度が高いので、ぜひ手元で一度試して感覚を掴んでみてください。
次回は ~/.ssh/config を活用して、接続設定をもっとスマートに管理する方法を紹介します。疑問があれば、いつでもコメントでお知らせください!
連関ポスト
コメントはありません。