レンタルサーバーやVPSを触り始めると必ず出会う「SSH」。なんとなく怖くて避けていませんか。
SSH(Secure Shell)は、離れた場所にあるサーバーを、暗号化された安全な通信で遠隔操作する仕組みです。この記事では、仕組みのイメージ、実際の接続手順、安全に使うための必須設定までを初心者向けに解説します。
SSHは「安全な遠隔操作の電話回線」
サーバーは通常、手元にない場所(データセンター)で動いています。その操作のために、手元のPCからサーバーへ暗号化された通信路をつなぎ、コマンドを送り込む――これがSSHです。ポート番号は標準で22番が使われます(ポート番号の記事参照)。
通信はすべて暗号化されるため、途中で盗聴されても内容は読めません。かつて使われた平文のtelnetに代わり、サーバー遠隔操作の世界標準になっています。
認証の仕組み:パスワードと公開鍵

SSHのログイン方法は2つあります。
- パスワード認証:IDとパスワードでログイン。手軽ですが、総当たり攻撃の標的になります
- 公開鍵認証(推奨):手元のPCに「秘密鍵」、サーバーに「公開鍵」を置き、ペアの一致で認証。パスワードのように推測されることがなく、実運用ではこちらが標準です
実印(秘密鍵)と印鑑証明(公開鍵)の関係に似ています。秘密鍵は絶対に他人に渡さない・流出させないのが大原則です。
実際に接続してみる

- 鍵ペアを作る:ターミナルで
ssh-keygen -t ed25519を実行。ホームフォルダの.sshに秘密鍵(id_ed25519)と公開鍵(id_ed25519.pub)が生成されます - 公開鍵をサーバーに登録:VPSなら契約時の管理画面で登録できることが多く、既存サーバーなら
ssh-copy-idコマンドが便利です - 接続:
ssh ユーザー名@サーバーのIPアドレスで接続。初回は「本当に接続するか」の確認(フィンガープリント)が出るのでyesと入力 - 操作・切断:接続後は通常のLinuxコマンドで操作し(基本コマンド20選参照)、
exitで切断します
WindowsにもOpenSSHが標準搭載されており、追加ソフトなしでこの手順が使えます。
安全に使うための必須設定(サーバー側)
SSHの22番ポートは、世界中のボットが四六時中ノックしてくる場所です。VPSを借りたら初日に以下を設定しましょう。
- 公開鍵認証のみにする:パスワード認証を無効化(PasswordAuthentication no)すれば、総当たり攻撃は事実上無力化されます
- rootの直接ログインを禁止:一般ユーザーでログイン→必要時にsudo、が基本形(PermitRootLogin no)
- ファイアウォールの設定:SSH・Web(80/443)など必要なポートだけを開ける
SSHでできること(接続の先へ)
- ファイル転送:scp・SFTPコマンドで、暗号化されたままファイルを送受信できます(FTPの安全な後継)
- VS Codeからのリモート開発:Remote-SSH拡張機能を使うと、サーバー上のファイルを手元のエディタで直接編集できます
- GitHubへの接続:Gitのpush/pullもSSH鍵で認証するのが定番です(Git入門参照)
よくある質問
Q. SSHはWindowsでも使えますか?
A. 使えます。Windows 10以降はOpenSSHクライアントが標準搭載されており、ターミナル(PowerShell)からsshコマンドがそのまま動きます。
Q. 秘密鍵を入れたPCを紛失したらどうなりますか?
A. 鍵にパスフレーズを設定していれば即座に悪用はされにくいですが、サーバー側から該当の公開鍵を削除し、新しい鍵ペアに差し替えるのが正しい対処です。鍵作成時のパスフレーズ設定をおすすめします。
Q. 接続すると「Permission denied」と出ます。
A. ユーザー名の誤り、鍵の指定漏れ、サーバー側の公開鍵未登録、鍵ファイルの権限(パーミッション)の問題が典型原因です。「ssh -v」を付けて実行すると詳細ログで原因を絞り込めます。
接続情報を毎回打つのをやめる|config ファイル
SSHを使い始めて最初に効率が変わるのが、接続先の設定をファイルに書いておく方法です。~/.ssh/config に数行書くだけで、長いコマンドが短い名前に置き換わります。
たとえば次のように書きます。
| 書く内容 | 意味 |
|---|---|
| Host myserver | この名前で呼び出せるようにする |
| HostName 203.0.113.10 | 接続先のIPアドレスまたはドメイン |
| User takumi | ログインするユーザー名 |
| Port 2222 | 標準の22番から変更している場合 |
| IdentityFile ~/.ssh/id_ed25519 | 使う秘密鍵のファイル |
これで、以後は ssh myserver だけで接続できます。ファイル転送のコマンドでも同じ名前が使えます(scp file myserver:~/)。サーバーが複数ある人ほど効果が大きく、IPを覚える必要もなくなります。
configファイル自体の権限に注意してください。他人から読める状態だと、接続先の一覧が漏れます。chmod 600 ~/.ssh/config を実行しておきましょう。秘密鍵も同じく600です。権限が緩いと、SSHが安全のために接続自体を拒否します。
サーバー側で必ずやる、4つの設定
SSHのポートは、公開した瞬間から総当たり攻撃の対象になります。VPSを借りたら、最初にこれをやってください。順番も重要です。
| 順番 | 設定 | 効果 |
|---|---|---|
| 1 | 公開鍵認証でログインできることを確認する | これを確認する前に次へ進むと、締め出されます |
| 2 | パスワード認証を無効にする(PasswordAuthentication no) | 総当たり攻撃が原理的に成立しなくなる |
| 3 | root での直接ログインを禁止する(PermitRootLogin no) | 攻撃者が狙う既定のユーザー名を潰す |
| 4 | ポート番号を22番から変更する | 自動巡回の大半を回避できる。根本対策ではないが、ログが静かになる |
作業中は、必ず別のターミナルで接続を1つ開いたままにしてください。設定を反映して接続できなくなっても、開いたままのセッションから元に戻せます。これを怠って締め出され、サーバー会社のコンソール機能で復旧する、という事故は非常に多くあります。
さらに強化するなら、ログイン失敗を繰り返すIPを自動で遮断する仕組みを入れます。ただし、上の1〜3が済んでいれば、個人用途としては十分な水準です。
ポート転送|SSHの、いちばん便利な使い方
SSHは遠隔操作だけの道具ではありません。暗号化された通り道を作り、その中に別の通信を通せます。これを知ると、危険なポート開放をせずに済むようになります。
| 種類 | できること | 使う場面 |
|---|---|---|
| ローカル転送 | 手元の特定ポートへの接続を、サーバー側へ転送する | 外部に公開していないデータベース管理画面に、手元のブラウザからアクセスする |
| リモート転送 | サーバー側のポートへの接続を、手元へ転送する | 開発中のローカルサーバーを、一時的に外から見せる |
| 動的転送 | 簡易的なプロキシとして使う | 外出先から、自宅と同じ経路で通信する |
最もよく使うのがローカル転送です。ssh -L 8080:localhost:80 myserver のように書くと、手元のブラウザで localhost:8080 を開いたとき、サーバー側の80番につながります。サーバーのポートをインターネットに開けずに、管理画面を安全に操作できます。
データベース管理画面を外部公開してしまう事故は非常に多いのですが、この方法を知っていれば、その必要がなくなります。ポート番号の記事にも、開けてはいけない番号をまとめています。
鍵の種類と、作り直しの手順
公開鍵にはいくつかの方式があります。現在の推奨は明確です。
| 方式 | 評価 | 備考 |
|---|---|---|
| Ed25519 | 現在の推奨 | 短く、速く、強い。特別な理由がなければこれ |
| RSA 4096ビット | 可 | 古い機器との互換性が必要な場合 |
| RSA 2048ビット | 非推奨になりつつある | 新規に作る理由はない |
| DSA | 使わない | すでに無効化されている環境が多い |
作成は ssh-keygen -t ed25519 -C "メモ" の1行です。このときパスフレーズを必ず設定してください。秘密鍵ファイルを盗まれても、パスフレーズがなければ使えません。空のまま作ると、ファイル1つが漏れた時点で全サーバーへの入口が渡ります。
| 状況 | やること |
|---|---|
| PCを紛失した | 各サーバーのauthorized_keysから、その鍵の行を削除する。鍵を作り直す |
| 新しいPCに移行する | 鍵をコピーするより、新しい鍵を作って追加するほうが安全。古い端末の鍵は削除できる |
| 複数人で1台のサーバーを使う | 共有の鍵を配らず、1人1鍵にする。誰の鍵かを行末のメモで分かるようにしておく |
| パスフレーズを毎回聞かれて面倒 | ssh-agentに登録すれば、セッション中は1回で済む |
つながらないときの、切り分け順序
| 症状 | 原因 | 対処 |
|---|---|---|
| Connection refused(すぐ拒否される) | サーバーまでは届いているが、SSHが動いていない、またはポートが違う | ポート番号を確認。サーバー側でSSHが起動しているか確認 |
| Connection timed out(待たされる) | 経路上で遮断されている | ファイアウォールの設定。会社や公衆Wi-Fiが22番を塞いでいる可能性 |
| Permission denied (publickey) | 鍵が合っていない、または権限が緩い | 秘密鍵を600に。ssh -v でどの鍵を試したか確認できる |
| Host key verification failed | サーバーの鍵が変わった | サーバーを再構築したなら正常。心当たりがなければ接続せずに調査する |
| ログインはできるがすぐ切れる | タイムアウト設定、または通信の不安定 | configにServerAliveIntervalを設定する |
原因が分からないときは、ssh -v(詳細表示)で接続するのが最短です。どの鍵を試し、どの段階で失敗したかが行単位で出力されます。推測で設定をいじる前に、まずここを読んでください。
この記事で使える無料ツール
- ハッシュ値生成(SHA-256) — ダウンロードしたファイルの改ざんを確認する
- Base64エンコード・デコード — 鍵や設定を1行の文字列にする仕組みを確かめる
SSHで接続して操作する対象としては、VPSやクラウド型のレンタルサーバーが代表的です。それぞれの内容はVPSとはとmixhostクラウドサーバーの評判・料金で扱っています。
まとめ
SSHは「暗号化された遠隔操作」であり、鍵ペアの概念さえつかめば怖いものではありません。ssh-keygenで鍵を作り、sshで接続し、exitで帰る。この基本動作をWSLやVPSで体験すれば、サーバーの世界がぐっと身近になります。
この記事に関連する無料ツール
サブネット計算機(CIDR)
「192.168.1.10/24」と入力するだけで、ネットワークアドレス・使えるIP範囲・ホスト数・ビット構造を算出します。
