前回の投稿では、SSHキーの作成(key generation)を通して、安全なSSH接続の準備を整えました。 前回の投稿を見る : [SSH keygen: 初心者のための完全ガイド](https://blog.mikihands.com/whitedec/2025/6/19/ssh-keygen-beginner-guide) 今回はいよいよ、SSHでリモートサーバーに接続する基本を学びます。SSHコマンド自体は思っているよりシンプルですが、いくつかの原則と便利なオプションを知っておくと、作業がぐっと快適になります。 --- ## SSHコマンドはどう書けばいい? {#sec-440e3eef962d} SSHコマンドの基本形は次の通りです。 ```bash ssh [オプション] [ユーザー名]@[ホストアドレス] [コマンド] ``` それぞれが何を意味するのか、順番に見ていきましょう。 1. **`ssh`**:SSHクライアントを起動するコマンドです。 2. **`[オプション]`**:接続方法を調整するための指定です。鍵ファイルの選択、ポートの指定、ポートフォワーディングなどができます(後で詳しく紹介します)。 3. **`[ユーザー名]`**:接続先(リモートサーバー)のユーザー名です。ローカルと同じユーザー名で接続する場合は省略できることがあります。 4. **`[ホストアドレス]`**:接続先のIPアドレスまたはドメイン名です。 5. **`[コマンド]`(任意)**:接続後すぐにリモート側で実行したいコマンドがある場合に指定します。コマンドが実行されるとSSHセッションは終了します。省略すると、ログインして対話型シェル(シェル操作)を行えます。 ### 覚えやすいコツ:SSHコマンドの「芯」 {#sec-d6722609001f} SSHコマンドの核心はとてもシンプルです。 * **基本原則:** `ssh ユーザー名@ホストアドレス` * **例:** `ssh ubuntu@192.168.1.100`(192.168.1.100の`ubuntu`ユーザーとして接続) * **例:** `ssh root@mywebserver.com`(`mywebserver.com`の`root`ユーザーとして接続) * **覚え方:** * **「誰として(ユーザー名)、どこへ(ホスト)入るか」**だけをまず押さえる。 * `ssh`(接続する)→ `ユーザー名@`(誰として)→ `ホスト`(どこへ) また、よく使う接続先は `~/.ssh/config` を使うと、長いアドレスやオプションを毎回入力しなくて済みます(この話は次回の記事で詳しく取り上げます)。 --- ## 便利なSSHオプションを解剖する {#sec-73d0a9a1fc13} SSHには用途に応じて使える便利なオプションが多数あります。ここでは実務でもよく登場するものを中心に紹介します。 ![SSH妖精がオプションを案内する場面](/media/whitedec/blog_img/ssh_fairy_options.webp) ### 1. `-i `:使う秘密鍵ファイルを指定する {#sec-349aa3468a92} 複数のSSHキーを使い分けているとき、接続先ごとに「この鍵で接続したい」を明示するために使います。通常は `~/.ssh/id_rsa` や `~/.ssh/id_ed25519` が使われますが、鍵を複数管理する場合は `-i` が便利です。 * **使い方:** `ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com` * **例:** ```bash ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com Enter passphrase for key '/home/youruser/.ssh/id_ed25519_my_server': ``` ### 2. `-p `:SSHポートを指定する {#sec-146d903b78f5} SSHサーバーの標準ポートは22番ですが、セキュリティ上の理由で別ポートに変更して運用されていることも多いです。その場合は `-p` でポート番号を指定して接続します。 * **使い方:** `ssh -p 2222 your_user@your_server.com` * **例:** ```bash 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アプリを表示する) {#sec-12fdd200dca1} リモートサーバー上でGUIアプリを起動し、その画面をローカルに表示して操作したい場合に使います。X Window System を利用するため、ローカル側でもXサーバーが必要です(macOSならXQuartz、WindowsならPuTTY + VcXsrvなど)。 * **使い方:** `ssh -X your_user@your_server.com` * **例:** ```bash ssh -X myuser@remote-gui-server.com myuser@remote-gui-server:~ $ firefox & ``` リモートで起動した `firefox` のウィンドウがローカルに表示されます。ネットワーク遅延が大きい環境では操作が重く感じることがあります。 ### 4. `-L ::`:ローカルポートフォワーディング(Local Port Forwarding) {#sec-62c13fb6374d} ローカル側のポート(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は可能な場合: ```bash 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` からしか到達できない場合: ```bash 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`:リモートでコマンドを実行せず、トンネルだけを維持する {#sec-c295de214906} `-L` や `-D`(Dynamic Port Forwarding / SOCKSプロキシ)と組み合わせて使い、「ログインして操作する」のではなく「フォワーディング用トンネルだけを張り続ける」用途で便利です。 * **使い方:** `ssh -N -L 8080:localhost:80 your_user@your_server.com` * **例:** ```bash ssh -N -L 8080:localhost:80 myuser@my_web_server.com & ``` バックグラウンド(`&`)でトンネルを維持し、ローカルのブラウザからアクセスできる状態を保てます。 ### 6. `-f`:接続後にSSHプロセスをバックグラウンドへ送る {#sec-7385158ab355} SSH接続が確立した後、クライアントプロセスをバックグラウンドへ送ります。`-N` と組み合わせて、ポートフォワーディングを常駐させたいときによく使います。 * **使い方:** `ssh -f -N -L 8080:localhost:80 your_user@your_server.com` * **例:** ```sh ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com ``` 実行するとすぐにターミナル操作が戻り、SSHトンネルはバックグラウンドで動き続けます。`ps aux | grep ssh` などでプロセスを確認できます。 --- ### まとめ {#sec-75068ae8a4ff} 今回はSSHコマンドの基本構造と、実務でよく使う主要オプションを整理しました。特に `-p` によるポート指定と `-L` によるポートフォワーディングは登場頻度が高いので、ぜひ手元で一度試して感覚を掴んでみてください。 次回は `~/.ssh/config` を活用して、接続設定をもっとスマートに管理する方法を紹介します。疑問があれば、いつでもコメントでお知らせください! --- **連関ポスト** -[あなたのSSHサーバーは安全ですか?SSHサーバーログによるハッキングの兆候完全解析](/ja/whitedec/2025/11/24/ssh-server-security-log-analysis/)