sshコマンドの使い方|オプションと鍵認証の設定

sshコマンドの使い方

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を機能として追加できるようになりました。

sshコマンドを打てる環境
環境使えるか補足
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コマンドのよく使うオプション一覧

オプションは、接続先より前に書きます。現場で使う頻度が高いものに絞って並べました。

sshコマンドの主なオプション(OpenSSH)
オプション意味使う場面
-p 番号接続先のポート番号を指定22番以外で待っているサーバー
-i ファイル使う秘密鍵を指定鍵を複数持っているとき
-l 名前ユーザー名を指定「名前@」の代わり
-v(-vv・-vvv)接続の途中経過を表示つながらない原因を探すとき
-J 踏み台踏み台を経由して接続社内の機器へ外から入るとき
-L 手元:相手:番号手元のポートを相手側へ転送機器の管理画面を手元で開くとき
-Nコマンドを実行しない-Lで転送だけしたいとき
-o 設定設定項目を1回だけ指定古い機器への接続など
-4/-6IPv4だけ/IPv6だけを使う名前がどちらにも引けるとき

-vは、迷ったら最初に付けるオプションです。どの鍵を試し、どの段階で止まったかが1行ずつ出ます。「Offering public key」の後に「Authenticated」が出ればログイン成功、出なければ鍵が受け入れられていません。

ssh-keygenで鍵を作り、パスワードなしでログインする

鍵認証は、秘密鍵(手元に置く)と公開鍵(相手に置く)の組で本人を確かめる方法です。パスワードを打たずに済むうえ、パスワードを当てにくる総当たりの攻撃にも強くなります。

  1. 手元でssh-keygen -t ed25519を打ち、鍵の組を作る(保存先はEnterで既定のままでよい)
  2. 鍵を守るパスフレーズを入れる(空にもできるが、入れておくほうが安全)
  3. 公開鍵(id_ed25519.pub)を、相手の~/.ssh/authorized_keysに1行で追記する
  4. 相手側で.sshは700、authorized_keysは600の権限にする
  5. 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は、次の節で説明する踏み台の指定を、設定ファイルに書く形です。

~/.ssh/configでよく使う項目
項目意味コマンドで書くと
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は「どこへつなぐか」が違う

-J(踏み台を経由)
できること
踏み台の奥の機器に、sshでログインする
書き方
ssh -J 踏み台 奥の機器
向く作業
奥のルーターやサーバーでコマンドを打つ
-L(ポート転送)
できること
手元のポートを、奥の機器のポートへつなぐ
書き方
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や機器のバージョン・環境によって変わる場合があります。業務で使う機器では、所属先の手順と各製品の最新資料をあわせてご確認ください。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Tanabeです。新卒でSIerに入り、ネットワークの設計から構築、運用保守、クラウド移行まで10年やってきました。その間に転職を3回、CCNPも取りました。

正直に言うと、資格を取っても年収はすぐには上がりませんでした。1回目の転職は失敗、2回目でようやく150万円上がり、3回目で今の事業会社に落ち着いた。動いてみて分かったのは、資格の有無より「現場で何を任されてきたか」で評価が決まる、ということです。

エージェントの言葉を鵜呑みにして、危うく後悔しかけた経験もあります。だからこそ、自分がやらかした失敗をそのまま書いて、同じ回り道をしなくて済むように残しています。転職を考え始めた人が、条件で損をしないための材料にしてもらえたら嬉しいです。

目次