SSH コマンド:-l・-p・-i オプションの使い方と接続エラーの確認

テスト環境RHEL系AlmaLinux 9.8OpenSSH 9.9p1受信側 Debian 12 · OpenSSH 9.2p1 一般ユーザーrootアカウント
ネットワークコマンドssh場所/usr/bin/ssh

SSH コマンドは、ssh アカウント@サーバーアドレスの形でリモートの Linux サーバーに暗号化された接続でログインし、接続先のサーバーでコマンドを実行する OpenSSH クライアントのコマンドです。AlmaLinux 9 サーバーから Debian 12 サーバーへ ssh を実行し、初回接続のホストキー確認から -l・-p・-i オプション、リモートコマンドの実行、-v のデバッグ出力まで順に確認した結果、オプションが実際にどう適用されるかは、接続しなくても ssh -G で事前に確認できました。

以下の出力は 2 台のサーバーで実行した結果そのままです。サーバーアドレスとアカウント、ホスト名、鍵のパスと鍵のフィンガープリント、接続元サーバーの OpenSSL・カーネルのバージョン番号は例の値に置き換えています。接続元の AlmaLinux サーバーは root アカウント、接続先の Debian サーバーは一般アカウントです。

1️⃣ SSH コマンドの基本的な使い方

リモートサーバーにログインするときは、ssh の後にアカウント名とサーバーアドレスを @ でつないで書きます。ログインするとプロンプトが接続先サーバーのものに変わり、exit を入力すると接続を切って元のサーバーに戻ります。

ssh user@192.0.2.10
Linux server2 6.1.0-53-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.187-1 (2026-09-07) x86_64
Last login: Wed Oct 28 20:27:41 2026 from 198.51.100.7
[user]:~$ whoami
user
[user]:~$ exit
exit
Connection to 192.0.2.10 closed.

接続した Debian サーバーでは、ログイン時にサーバーの案内文(motd)数行とメール通知も表示されました。上の出力ではその行だけを省いています。

初めて接続するサーバーでは、ログインの前にサーバーのホストキーのフィンガープリントを表示し、接続を続けるか尋ねます。yes を入力するとホストキーが ~/.ssh/known_hosts に保存され、その後に whoami の結果が表示されました。

ssh user@192.0.2.10 whoami
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

known_hosts に保存された後は、同じサーバーに接続してもこの質問は再び表示されませんでした。フィンガープリントがサーバー管理者から受け取った値と違う場合は no を入力します。no を入力すると接続せずに終了しました。

ssh user@192.0.2.10
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? no
Host key verification failed.

no で終了したときは known_hosts ファイルが作成されませんでした。そのため次の接続でも同じ質問が再び表示されます。

2️⃣ SSH コマンドのオプション

ssh のオプションは接続先の前に書きます。ssh だけを実行すると、使えるオプションの一覧が使い方として表示されました。

ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
           [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
           [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
           [-J destination] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           destination [command [argument ...]]
       ssh [-Q query_option]

使い方にないオプションを指定すると、[unknown option] エラーとともに同じ使い方が再び表示されます。

-V はインストールされている OpenSSH クライアントのバージョンを表示します。以下は接続元の AlmaLinux サーバーの結果で、接続先の Debian 12 サーバーでは OpenSSH_9.2p1 と表示されました。

ssh -V
OpenSSH_9.9p1, OpenSSL 3.5.1 1 Jul 2025

-G はサーバーに接続せず、指定したオプションと設定ファイルを合わせて、実際に適用される値を表示します。出力全体は 87 行あるため、grep で必要な行だけを選びます。

ssh -G user@example.com | grep -E "^(user|hostname|port|identityfile|connecttimeout|stricthostkeychecking|serveraliveinterval) "
user user
hostname example.com
port 22
stricthostkeychecking ask
serveraliveinterval 0
identityfile ~/.ssh/id_rsa
identityfile ~/.ssh/id_ecdsa
identityfile ~/.ssh/id_ecdsa_sk
identityfile ~/.ssh/id_ed25519
identityfile ~/.ssh/id_ed25519_sk
identityfile ~/.ssh/id_xmss
identityfile ~/.ssh/id_dsa
connecttimeout none

identityfile の 7 行は、-i を指定しなかったときに ssh が順に探すデフォルトの鍵ファイルです。connecttimeout none は接続の待ち時間を特に設定していないという意味です。

オプションコピー説明
-lアカウント接続するアカウント名を指定
-pポート接続するポートを指定(デフォルト 22)
-i鍵ファイル秘密鍵ファイルを指定
-v接続の過程を debug1 行で表示
-C送受信するデータを圧縮
-XX11 フォワーディング(リモートの GUI プログラム)
-T仮想端末を割り当てない
-t仮想端末を強制的に割り当てる
-n標準入力を /dev/null に変更
-q警告と案内のメッセージを減らす
-o項目=値設定ファイルの項目をこの接続だけに指定
-Lローカルポートフォワーディング
-F設定ファイルを指定
-G接続せずに適用される設定を表示
-VOpenSSH クライアントのバージョンを表示
オプションコピー説明
-Nリモートコマンドなしで接続だけを維持
-J別のサーバーを経由して接続

3️⃣ ssh -l オプションと -L ポートフォワーディング

-l は接続するアカウント名を指定するオプションです。ssh -l user 192.0.2.10 は ssh user@192.0.2.10 と同じアカウントで接続しました。

ssh -l user 192.0.2.10 whoami
user

-G で確認すると、-l で指定したアカウントが user 項目に入りました。

ssh -G -l admin example.com | grep -E "^(user|hostname|port) "
user admin
hostname example.com
port 22

-l とアカウント@アドレスを両方書いたときにどちらが適用されるかも -G で確認しました。OpenSSH 9.9p1 では -l で指定した admin が適用されました。

ssh -G -l admin user@example.com | grep -E "^(user|hostname) "
user admin
hostname example.com

大文字の -L は名前が似ていますが、アカウントとは関係のないローカルポートフォワーディングのオプションです。自分のサーバーのポートに入ってきた接続を SSH 接続の中に通し、リモートサーバー側のアドレスとポートにつなぎます。

8080:localhost:80 は、自分のサーバーの 8080 番ポートを、リモートサーバーから見た localhost の 80 番ポートにつなぐという意味です。-G で確認すると localforward 項目に同じ値が入りました。

ssh -G -L 8080:localhost:80 user@example.com | grep -E "^(hostname|localforward) "
hostname example.com
localforward 8080 [localhost]:80

トンネルだけを開いておくときは、リモートコマンドなしで接続を維持する -N を一緒に書きます。

4️⃣ SSH のポートと鍵ファイルの指定

SSH サーバーが 22 番以外のポートで接続を受け付ける場合は、-p でポートを指定します。-i はデフォルト名ではない秘密鍵ファイルを指定します。

ssh -G -p 2222 -i ./mykey user@example.com | grep -E "^(user|hostname|port|identityfile) "
user user
hostname example.com
port 2222
identityfile ./mykey

-i を指定すると、デフォルトの鍵ファイル 7 行が消え、指定したファイル 1 つだけが残りました。

鍵ファイルは ssh-keygen で作成します。すでに使っている鍵がある場合は、-f に新しいファイル名を指定します。以下は新しい名前 mykey で ed25519 の鍵を作成した結果です。

ssh-keygen -t ed25519 -f ./mykey -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in ./mykey
Your public key has been saved in ./mykey.pub
The key fingerprint is:
SHA256:XLbhLZHSNdMvUqhSIbzRNJi/zKKkNnWmy0mTeBoUfaY user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|       ..=+.+o   |
|     .  =oo+.oo  |
|    . . +=B. . . |
|     . =o=o=. . .|
|    . E S++... . |
|   . .o.+ +.     |
|    o+== .       |
|    +*oo         |
|   ...+.         |
+----[SHA256]-----+

mykey が秘密鍵で、mykey.pub が公開鍵です。OpenSSH のマニュアルは、公開鍵を接続先サーバーの ~/.ssh/authorized_keys に入れるよう案内しています。この作業は [ssh-copy-id -i ./mykey.pub user@192.0.2.10] のように ssh-copy-id で行えます。

同じサーバーによく接続するなら、~/.ssh/config にエイリアスを書いておき、ssh とエイリアスだけを入力します。Host 行がエイリアスで、その下の行がそのエイリアスで接続するときに適用される値です。

Host myserver
    HostName 192.0.2.10
    User user
    Port 2222
    IdentityFile ~/.ssh/mykey

この設定を ./config ファイルに書いて -F で読み込んで確認すると、エイリアス 1 つでアドレスとアカウント、ポート、鍵ファイルがすべて適用されました。

ssh -F ./config -G myserver | grep -E "^(user|hostname|port|identityfile) "
user user
hostname 192.0.2.10
port 2222
identityfile ~/.ssh/mykey

コマンドラインに書いたオプションは設定ファイルより優先されます。同じエイリアスに -p 22 を一緒に書くと、port が 22 に変わりました。

ssh -F ./config -G -p 22 myserver | grep -E "^(hostname|port) "
hostname 192.0.2.10
port 22

hostname は設定ファイルの 192.0.2.10 のままで、port だけがコマンドラインに書いた値に変わりました。

5️⃣ SSH でリモートコマンドを実行

接続先の後にコマンドを書くと、ログイン画面なしでそのコマンドだけを実行して接続を切ります。コマンドが複数ある場合やセミコロンのようなシェル記号が入る場合は、シングルクォートで囲みます。

ssh user@192.0.2.10 'whoami; hostname'
user
server2

リモートコマンドの終了コードは、そのまま ssh の終了コードとして返ってきました。スクリプトではこの値でリモートコマンドが成功したかを判断します。

ssh user@192.0.2.10 'exit 3'; echo $?
3

コマンドを付けて実行すると仮想端末は割り当てられません。-T で実行した tty は [not a tty] と表示しました。

ssh -T user@192.0.2.10 tty
not a tty

ssh のマニュアルは、-t をリモートサーバーで画面ベースのプログラムを実行するときに使うオプションとして説明しています。-t を付けると /dev/pts/0 が表示され、終了時に接続を閉じたというメッセージも表示されました。

ssh -t user@192.0.2.10 tty
/dev/pts/0
Connection to 192.0.2.10 closed.

-q を一緒に書くと、このメッセージは表示されませんでした。

ssh -t -q user@192.0.2.10 tty
/dev/pts/0

-n は ssh の標準入力を /dev/null に変えます。-n なしで実行すると、パイプで渡した hello をリモートの cat がそのまま表示しました。

echo hello | ssh user@192.0.2.10 cat
hello
echo hello | ssh -n user@192.0.2.10 cat

同じコマンドに -n を付けると、hello がリモートの cat に渡らず、何も表示されませんでした。

6️⃣ SSH の接続エラーと ssh -v のデバッグ

接続できないときは、まずエラーメッセージでどの段階で止まったかを確認します。サーバーアドレスが見つからないときは [Could not resolve hostname] と表示されました。

ssh user@nosuchhost.invalid
ssh: Could not resolve hostname nosuchhost.invalid: Name or service not known

アドレスは正しいのにそのポートから応答がない場合は [Connection timed out] と表示されます。-o ConnectTimeout=5 を付けると、5 秒後にこのエラーで終了しました。

ssh -o ConnectTimeout=5 -p 2222 user@192.0.2.10
ssh: connect to host 192.0.2.10 port 2222: Connection timed out

known_hosts にないサーバーに -o BatchMode=yes で接続すると、ホストキーを尋ねずに [Host key verification failed.] で終了しました。スクリプトで初回接続が質問で止まらないようにするには StrictHostKeyChecking=accept-new を使います。

ssh -o BatchMode=yes user@192.0.2.10 true
Host key verification failed.

ssh_config のマニュアルによると、accept-new は初めて見るサーバーのホストキーだけを尋ねずに保存します。すでに保存されている鍵と違う鍵が来た場合は接続を拒否します。

ssh -o StrictHostKeyChecking=accept-new user@192.0.2.10 whoami
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.
user

鍵が登録されていないアカウントでは [Permission denied (publickey)] と表示されます。認証の失敗を繰り返すと、サーバーが接続元の IP をブロックすることがあります。

-v は接続の過程を debug1 行で表示します。出力全体が 70 行を超えるため、以下は接続と認証の段階の行だけを grep で選んだものです。

ssh -v -i ~/.ssh/id_ed25519 user@192.0.2.10 true 2>&1 | grep -E 'Connecting to|Connection established|remote software version|Server host key|is known and matches|can continue|Offering public key|Authenticated to|Exit status'
debug1: Connecting to 192.0.2.10 [192.0.2.10] port 22.
debug1: Connection established.
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u10
debug1: Server host key: ssh-ed25519 SHA256:9fT2kL0qX8vN4cR1yB6sW3mZ7aH5dE0uJ2pG8oK1iVc
debug1: Host '192.0.2.10' is known and matches the ED25519 host key.
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: /root/.ssh/id_ed25519 ED25519 SHA256:4bN7qT1xW9cK3mR6yH0sD2fL8vZ5aJ1eP7uG3oX4iQs explicit
Authenticated to 192.0.2.10 ([192.0.2.10]:22) using "publickey".
debug1: Exit status 0

Connecting to の行が接続の試行で、Server host key と is known and matches の行がホストキーの確認です。Offering public key の行で鍵を提示し、Authenticated to の行で鍵認証が終わりました。認証で止まる場合は、まず Offering public key の行に使いたい鍵ファイルが表示されているかを確認します。

-C を一緒に書くと、kex 行の compression の値が none から zlib@openssh.com に変わりました。

ssh -v -C user@192.0.2.10 true 2>&1 | grep -E 'compression'
debug1: kex: server->client cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: kex: client->server cipher: aes256-gcm@openssh.com MAC: <implicit> compression: zlib@openssh.com
debug1: Enabling compression at level 6.

-X はリモートサーバーの GUI プログラムの画面を自分のコンピューターに持ってくるオプションです。画面のない AlmaLinux サーバーで実行すると、DISPLAY がないという debug1 行が表示されました。

ssh -v -X user@192.0.2.10 true 2>&1 | grep DISPLAY
debug1: X11 forwarding requested but DISPLAY not set

DISPLAY は GUI の画面を表示する先を決める環境変数です。そのため -X はデスクトップ画面のあるコンピューターから接続するときに使います。

🔲 SSH コマンドシミュレーター

下のシミュレーターでは、仮想サーバーに ssh で接続し、オプションやリモートコマンド、ssh -G を直接入力して確認できます。

SSH コマンドシミュレーターAlmaLinux 9.8 → Debian 12
[root@server work]#
ブラウザーの中だけで動作し、実際のサーバーには接続しません。↑↓ で前に入力したコマンドを呼び出せます。

🔢 FAQ & おすすめコンテンツ

-o ServerAliveInterval=60 を付けると、60 秒ごとにサーバーへ信号を送って接続を維持します。-G で確認すると、serveraliveinterval がデフォルトの 0 から 60 に変わりました。毎回書かないようにするには、~/.ssh/config の Host の下に同じ項目を入れます。

ssh の使い方にはパスワードを受け取るオプションがありません。パスワード認証は接続時の質問に入力し、自動で接続する必要がある作業では ssh-keygen で作成した鍵で認証します。

-J に経由するサーバーを書きます。[ssh -J admin@bastion.example.com user@192.0.2.10] を -G で確認すると、proxyjump 項目に経由するサーバーが入りました。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 4   +   1   =