SSHとは?仕組みと使い方を初心者向けに解説【公開鍵認証の基本】

公開

/ 最終更新

SSHとは?仕組みと使い方を初心者向けに解説【公開鍵認証の基本】

レンタルサーバーやVPSを触り始めると必ず出会う「SSH」。なんとなく怖くて避けていませんか。

SSH(Secure Shell)は、離れた場所にあるサーバーを、暗号化された安全な通信で遠隔操作する仕組みです。この記事では、仕組みのイメージ、実際の接続手順、安全に使うための必須設定までを初心者向けに解説します。

SSHは「安全な遠隔操作の電話回線」

サーバーは通常、手元にない場所(データセンター)で動いています。その操作のために、手元のPCからサーバーへ暗号化された通信路をつなぎ、コマンドを送り込む――これがSSHです。ポート番号は標準で22番が使われます(ポート番号の記事参照)。

通信はすべて暗号化されるため、途中で盗聴されても内容は読めません。かつて使われた平文のtelnetに代わり、サーバー遠隔操作の世界標準になっています。

認証の仕組み:パスワードと公開鍵

SSHの公開鍵認証の仕組み。手元のPCの秘密鍵とサーバーの公開鍵のペアが一致して初めてログインできる図解
「鍵ペア」の考え方はSSH以外でも使われる重要概念です

SSHのログイン方法は2つあります。

  • パスワード認証:IDとパスワードでログイン。手軽ですが、総当たり攻撃の標的になります
  • 公開鍵認証(推奨):手元のPCに「秘密鍵」、サーバーに「公開鍵」を置き、ペアの一致で認証。パスワードのように推測されることがなく、実運用ではこちらが標準です

実印(秘密鍵)と印鑑証明(公開鍵)の関係に似ています。秘密鍵は絶対に他人に渡さない・流出させないのが大原則です。

実際に接続してみる

SSH接続の流れ。ssh-keygenで鍵ペアを作成し、sshコマンドでサーバーに接続してLinux操作を行う例
WindowsもMacも、標準のターミナルからそのまま使えます
  1. 鍵ペアを作る:ターミナルで ssh-keygen -t ed25519 を実行。ホームフォルダの.sshに秘密鍵(id_ed25519)と公開鍵(id_ed25519.pub)が生成されます
  2. 公開鍵をサーバーに登録:VPSなら契約時の管理画面で登録できることが多く、既存サーバーならssh-copy-idコマンドが便利です
  3. 接続:ssh ユーザー名@サーバーのIPアドレス で接続。初回は「本当に接続するか」の確認(フィンガープリント)が出るのでyesと入力
  4. 操作・切断:接続後は通常の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)総当たり攻撃が原理的に成立しなくなる
3root での直接ログインを禁止する(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(詳細表示)で接続するのが最短です。どの鍵を試し、どの段階で失敗したかが行単位で出力されます。推測で設定をいじる前に、まずここを読んでください。

この記事で使える無料ツール

SSHで接続して操作する対象としては、VPSやクラウド型のレンタルサーバーが代表的です。それぞれの内容はVPSとはmixhostクラウドサーバーの評判・料金で扱っています。

まとめ

SSHは「暗号化された遠隔操作」であり、鍵ペアの概念さえつかめば怖いものではありません。ssh-keygenで鍵を作り、sshで接続し、exitで帰る。この基本動作をWSLやVPSで体験すれば、サーバーの世界がぐっと身近になります。

この記事に関連する無料ツール

サブネット計算機(CIDR)
「192.168.1.10/24」と入力するだけで、ネットワークアドレス・使えるIP範囲・ホスト数・ビット構造を算出します。

この記事に出てくる用語

レンタルサーバー/ファイアウォール/総当たり攻撃/IPアドレス/ポート番号/ほか計117語をIT用語辞典で解説しています