sshコマンドは「ssh ユーザー名@接続先」と打って、離れたサーバーやネットワーク機器へ暗号化した通信でログインするコマンドです。番号を変えるなら-p、鍵を指定するなら-i、踏み台を経由するなら-Jを付けます。Windowsも10の1809以降は同じsshを使えます。
この記事でわかること
- sshコマンドの基本の書き方と、初回に出る確認メッセージの意味
- -p・-i・-v・-J・-L などよく使うオプションの一覧
- ssh-keygenで鍵を作り、パスワードなしでログインする手順
- ~/.ssh/configに接続先を登録して短く打つ方法
- 古いルーターやスイッチで出る「no matching key exchange method」の対処
一次情報: OpenBSD manual pages「ssh(1)」(参照)/OpenBSD manual pages「ssh_config(5)」(参照)/OpenSSH「Legacy Options」(参照)/OpenSSH 8.8 リリースノート(参照)/Microsoft Learn「OpenSSH for Windows overview」(参照)※2026年10月時点
sshでサーバーや機器に入るのは、運用保守の現場で毎日のようにある作業です。構築から運用保守へ移る転職がどう評価されるかは、別の記事にまとめました。
sshコマンドとは?暗号化した通信で遠隔操作するコマンド
sshコマンドとは、離れた場所にあるサーバーやルーター・スイッチへ、暗号化した通信でログインするコマンドです。ログインした後は、手元で打ったコマンドがすべて相手の機器の上で動きます。
使うのはOpenSSHという無償のソフトで、LinuxとMacには最初から入っています。Microsoftの資料によると、WindowsもWindows 10のビルド1809とWindows Server 2019から、OpenSSHを機能として追加できるようになりました。
| 環境 | 使えるか | 補足 |
|---|---|---|
| Linux・Mac | 使える | ターミナルでそのまま打つ |
| Windows 10(1809以降)・11 | 使える | コマンドプロンプトでもPowerShellでも同じ書き方 |
| Windows Server 2019以降 | 使える | 入っていなければオプション機能から追加 |
| Cisco IOSの機器 | 使える | 機器から別の機器へ「ssh -l ユーザー名 相手」で入る |
Windowsで「’ssh’ は…認識されていません」と出たときは、設定の「オプション機能」でOpenSSHクライアントを追加します。sshと一緒に、鍵を作るssh-keygenやファイルを送るscpも使えるようになります。
sshコマンドの基本の書き方
基本は「ssh ユーザー名@接続先」です。接続先にはIPアドレスでもホスト名でも書けます。
ssh admin@192.0.2.10
ssh -l admin 192.0.2.10 (-lでユーザー名を指定する書き方)
ssh -p 2222 admin@192.0.2.10 (22番以外で待っているとき)
アドレスは説明用の値です。ユーザー名を省くと、手元でログインしている名前がそのまま使われます。
初回に出る「Are you sure you want to continue connecting」
初めての相手につなぐと、相手の鍵の指紋(fingerprint)が表示され、yesかnoかを聞かれます。これは「この相手を本物として覚えてよいか」の確認です。
yesと答えると、相手の鍵が手元の~/.ssh/known_hostsに記録されます。2回目からは、記録した鍵と一致するかを自動で確かめるしくみです。機器の入れ替えをしていないのに、この確認がまた出たら要注意です。別の機器が同じアドレスを名乗っている可能性があります。
ログアウトと、固まったときの抜け方
終えるときはexitと打ちます。画面が固まって何も受け付けないときは、Enterを押してから「~.」(チルダとピリオド)と続けて打ってください。sshの接続だけが切れます。
sshコマンドのよく使うオプション一覧
オプションは、接続先より前に書きます。現場で使う頻度が高いものに絞って並べました。
| オプション | 意味 | 使う場面 |
|---|---|---|
| -p 番号 | 接続先のポート番号を指定 | 22番以外で待っているサーバー |
| -i ファイル | 使う秘密鍵を指定 | 鍵を複数持っているとき |
| -l 名前 | ユーザー名を指定 | 「名前@」の代わり |
| -v(-vv・-vvv) | 接続の途中経過を表示 | つながらない原因を探すとき |
| -J 踏み台 | 踏み台を経由して接続 | 社内の機器へ外から入るとき |
| -L 手元:相手:番号 | 手元のポートを相手側へ転送 | 機器の管理画面を手元で開くとき |
| -N | コマンドを実行しない | -Lで転送だけしたいとき |
| -o 設定 | 設定項目を1回だけ指定 | 古い機器への接続など |
| -4/-6 | IPv4だけ/IPv6だけを使う | 名前がどちらにも引けるとき |
-vは、迷ったら最初に付けるオプションです。どの鍵を試し、どの段階で止まったかが1行ずつ出ます。「Offering public key」の後に「Authenticated」が出ればログイン成功、出なければ鍵が受け入れられていません。
ssh-keygenで鍵を作り、パスワードなしでログインする
鍵認証は、秘密鍵(手元に置く)と公開鍵(相手に置く)の組で本人を確かめる方法です。パスワードを打たずに済むうえ、パスワードを当てにくる総当たりの攻撃にも強くなります。
- 手元でssh-keygen -t ed25519を打ち、鍵の組を作る(保存先はEnterで既定のままでよい)
- 鍵を守るパスフレーズを入れる(空にもできるが、入れておくほうが安全)
- 公開鍵(id_ed25519.pub)を、相手の~/.ssh/authorized_keysに1行で追記する
- 相手側で.sshは700、authorized_keysは600の権限にする
- ssh 名前@相手 でつなぎ、パスワードを聞かれなければ完了
LinuxやMacなら、手順3は「ssh-copy-id 名前@相手」の1行で済むので手軽です。Windowsにはssh-copy-idが無いため、公開鍵の中身をコピーして相手のファイルに貼るか、PowerShellで次のように送ります。
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh admin@192.0.2.10 "cat >> ~/.ssh/authorized_keys"
鍵の既定の置き場所は、LinuxとMacが~/.ssh、Windowsはユーザーフォルダの下の.sshフォルダです。
パスワードを聞かれ続けるときに見る2点
鍵を置いたのにパスワードを聞かれる原因は、たいてい権限か置き場所です。相手側の.sshフォルダやauthorized_keysを他の人も書き込める権限にしていると、OpenSSHのサーバーは安全でないと見なして鍵を使いません。もう1つは、公開鍵を途中で改行してしまい、1行になっていないケースです。
~/.ssh/configに接続先を登録して短く打つ
毎回アドレス・ユーザー名・ポート・鍵を打つのは手間がかかります。~/.ssh/configに登録しておけば、「ssh web01」だけでつながります。
Host web01
HostName 192.0.2.10
User admin
Port 2222
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 30
Host core-sw
HostName 10.0.0.1
User netadmin
ProxyJump bastion
ServerAliveIntervalは、決めた秒数ごとに相手へ応答を求める設定です。何も打たない時間が続くと途中の機器に切られてしまう環境で役に立ちます。ProxyJumpは、次の節で説明する踏み台の指定を、設定ファイルに書く形です。
| 項目 | 意味 | コマンドで書くと |
|---|---|---|
| HostName | 本当の接続先 | ssh 接続先 |
| User | ユーザー名 | -l 名前 |
| Port | ポート番号 | -p 番号 |
| IdentityFile | 使う秘密鍵 | -i ファイル |
| ProxyJump | 踏み台 | -J 踏み台 |
| ServerAliveInterval | 応答確認の間隔(秒) | -o ServerAliveInterval=30 |
相手でコマンドを実行する・踏み台を経由する・ポートを転送する
ここからは、ログインして手で打つ以外の使い方です。運用の現場では、この3つを組み合わせる場面がよくあります。
相手の上でコマンドを1つだけ実行する
接続先の後ろにコマンドを書くと、ログインせずにそのコマンドだけを実行して結果を返します。複数のサーバーの状態をまとめて集めるときに便利です。
ssh admin@192.0.2.10 "df -h; uptime"
踏み台サーバーを経由する(-J)
社内の機器には、外から直接入れず、決められた踏み台サーバーを1台経由する作りが一般的です。-Jを付けると、踏み台に入ってから先へつなぐ操作を1回で済ませられます。
ssh -J admin@bastion.example.com netadmin@10.0.0.1
OpenSSHの資料では、踏み台はカンマで区切って複数並べられます。
手元のポートを相手側へ転送する(-L)
-Lは、手元のポートに来た通信を、ssh接続を通して相手側の機器へ送る機能です。踏み台の奥にある機器の管理画面(HTTPS)を、手元のブラウザで開きたいときに使います。
ssh -N -L 8443:10.0.0.20:443 admin@bastion.example.com
この状態で、手元のブラウザのアドレス欄に「localhost:8443」を入れてHTTPSで開くと、10.0.0.20の443番につながります。-Nは「ログインはせず、転送だけ続ける」という指定です。
-Jと-Lは「どこへつなぐか」が違う
- できること
- 踏み台の奥の機器に、sshでログインする
- 書き方
- ssh -J 踏み台 奥の機器
- 向く作業
- 奥のルーターやサーバーでコマンドを打つ
- できること
- 手元のポートを、奥の機器のポートへつなぐ
- 書き方
- ssh -N -L 手元:奥の機器:番号 踏み台
- 向く作業
- 奥の機器の管理画面を手元のブラウザで開く
図:コマンドを打つなら-J、画面やツールの通信を通すなら-L
古いネットワーク機器につながらないとき
長く使っているルーターやスイッチへsshすると、ログインの前に次のような表示で止まることがあります。OpenSSHの資料によると、手元のsshと相手の機器で、使える暗号の方式が1つも合わなかったときに出る表示です。
Unable to negotiate with 192.0.2.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
「Their offer」の後ろが、相手の機器が使える方式です。新しいOpenSSHは、弱くなった古い方式を最初から外しているため、合う方式が無くなります。
| 表示の中身 | 合わなかったもの | 付ける指定の例 |
|---|---|---|
| no matching key exchange method found | 鍵交換の方式 | -oKexAlgorithms=+diffie-hellman-group1-sha1 |
| no matching host key type found. Their offer: ssh-rsa | 機器が名乗る鍵の種類 | -oHostKeyAlgorithms=+ssh-rsa |
| no matching host key type found. Their offer: ssh-dss | 同上(DSAの鍵) | -oHostKeyAlgorithms=+ssh-dss |
「+」は、手元の既定の方式に追加するという意味です。ssh-rsaはOpenSSH 8.8から既定で外れており、リリースノートでは、該当する機器だけに~/.ssh/configで許可する書き方が示されています。
Host old-sw
HostName 192.0.2.1
KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
古い方式を許すのは、その機器だけに限るのが原則です。全部の接続先に効く書き方をすると、ほかのサーバーへの接続まで弱くなります。OpenSSHも、これは機器を更新するまでのつなぎの手段だとしています。機器の設定で新しい鍵(ECDSAやEd25519など)を作り直せるなら、そちらが本来の直し方です。
よくある質問
sshコマンドで接続できないとき、最初に何を見ればいいですか?
-vを付けて打ち直し、どこで止まったかを見ます。「Connection established」が出なければ22番まで届いていないネットワークの問題、出た後に止まるなら鍵の交換かログインの問題です。Windowsならまず「Test-NetConnection 相手 -Port 22」で届くかを確かめる方法もあります。
「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」と出ました
前回記録した相手の鍵と、今回の鍵が違うという警告です。機器の交換やOSの入れ直しが理由なら、「ssh-keygen -R 相手のアドレス」で古い記録を消してつなぎ直します。理由に心当たりがなければ、そのまま進めずに確認してください。
sshとscp・sftpは何が違いますか?
sshはログインしてコマンドを打つための道具、scpとsftpはファイルを送るための道具です。3つとも同じSSHの暗号化された通り道を使うので、sshでつながる相手ならscpやsftpも同じ鍵と設定で使えます。
何もしていないとsshの接続が切れてしまいます
途中のファイアウォールなどが、通信の無い接続を切っていることが多いです。~/.ssh/configにServerAliveInterval 30のように書くと、30秒ごとに応答を求める通信が流れ、切られにくくなります。
Ciscoのルーターからsshで別の機器に入れますか?
入れます。IOSでの書き方は「ssh -l ユーザー名 相手のアドレス」です。Linuxで使う「名前@相手」の形より、-lでユーザー名を渡す書き方が基本になります。
まとめ
- sshコマンドは「ssh ユーザー名@接続先」で、暗号化した通信でログインする
- 番号は-p、鍵は-i、原因探しは-v、踏み台は-J、ポート転送は-L
- 鍵認証はssh-keygen -t ed25519で作り、公開鍵を相手のauthorized_keysへ置く
- よく使う接続先は~/.ssh/configに登録すると「ssh 名前」だけでつながる
- 古い機器の「no matching…」は、その機器に限って方式を足して一時的に通す
sshで入れるようになったら、次は入った先で何を打つかです。サーバーなら待ち受けや経路、ネットワーク機器なら経路表や設定の読み方を順に覚えると、障害の切り分けが速くなります。
sshで機器に入り、設定や経路を自分で確かめられる人は、求人の幅が広がります。未経験・CCNA・CCNPの段階別に、ネットワークエンジニアが使う転職エージェントを比べた記事です。
免責事項
※本記事はOpenSSHの公式資料・Microsoftの公式ドキュメントなどの公開情報をもとに整理したものです。コマンドの表示や挙動は、OSや機器のバージョン・環境によって変わる場合があります。業務で使う機器では、所属先の手順と各製品の最新資料をあわせてご確認ください。

