※本記事にはプロモーション(広告)を含みます。

SSH接続を初めて設定するなら、パスワード認証ではなく公開鍵認証を軸に手順を進めてください。鍵ペアを1組作成してサーバーに登録するだけの作業で、完了まで慣れれば15分もかかりません。一度設定してしまえば、ログインのたびにパスワードを打ち込む手間がなくなり、総当たり攻撃によるログイン試行のリスクも大幅に下げられます。本記事では、Windows・Mac・Linuxそれぞれの環境でSSH接続を設定する具体的な手順と、初心者がつまずきやすいエラーへの対処法をまとめました。

目次

  • SSH接続の基本を理解する
  • 接続前の準備を整える
  • 実際の接続手順
  • よくあるトラブル対処
  • セキュリティを強化する
  • よくある質問
  • まとめ

SSH接続の基本を理解する

SSH(Secure Shell)は、離れた場所にあるサーバーやコンピューターに、暗号化された通信路を通じて安全にログインするためのプロトコルです。クラウドサーバーの操作、Gitリポジトリへのアクセス、リモートでのファイル転送など、インフラ・開発の現場で日常的に使われています。通信内容がすべて暗号化されるため、telnetのような平文通信のプロトコルに比べて盗聴のリスクが低く抑えられる点が最大の特徴です。

SSHとは何か

SSHはクライアントとサーバーの間でTCP接続を確立し、その上に暗号化されたセッションを構築する仕組みです。標準では22番ポートを使用し、ユーザーはターミナルやコマンドプロンプトから1行のコマンドでリモートホストにログインできます。バージョンにはSSH-1とSSH-2があり、現在配布されているOpenSSHはSSH-2をベースに実装されています。バージョン固有の挙動やオプションは、OpenSSHの公式マニュアル(man ssh、man sshd_config)を随時参照しながら確認する習慣をつけてください。

公開鍵認証の仕組み

公開鍵認証では「秘密鍵」と「公開鍵」というペアを使います。秘密鍵は自分のパソコンだけに保管し、公開鍵はログイン先のサーバーに登録します。接続時、サーバー側は公開鍵を使って暗号化した課題を送り、クライアント側が秘密鍵でそれを解いて返すことで本人確認が完了します。秘密鍵そのものがネットワーク上を流れることはないため、パスワード認証よりも漏えいの経路が少ない認証方式です。

ポート22番の役割

SSHサーバー(sshd)は既定で22番ポートを待ち受けます。社内ネットワークやクラウドのファイアウォール設定でこのポートを開放しないと、そもそも接続要求がサーバーに届きません。AWSのセキュリティグループやさくらのVPSのパケットフィルターなど、利用しているクラウド・レンタルサーバーの管理画面で22番ポート(もしくは変更後のポート)が許可されているかを、接続作業に入る前に確認しておくと手戻りを防げます。

接続前の準備を整える

接続コマンドを打つ前に、クライアント側の環境確認と鍵ペアの生成、公開鍵のサーバー登録という3つの準備が必要です。順番を飛ばすと後から原因が分かりにくいエラーに遭遇しやすいため、以下の順序で進めることをおすすめします。

OpenSSHの確認方法

Windows 10以降とmacOS、主要なLinuxディストリビューションには、OpenSSHクライアントが標準搭載されています。ターミナル(Windowsの場合はPowerShellまたはコマンドプロンプト)を開き、次のコマンドを実行してバージョンが表示されればそのまま利用できます。

ssh -V

バージョン情報が出ずに「コマンドが見つかりません」と表示された場合は、Windowsの「設定」→「アプリ」→「オプション機能」から「OpenSSHクライアント」を追加インストールしてください。古いWindows 10や特殊な環境では標準搭載されていないケースもあるため、GUIクライアントであるPuTTYやTera Termを代わりに使う選択肢もあります。

鍵ペアの生成手順

鍵ペアはターミナルで次のコマンドを実行して生成します。

ssh-keygen -t ed25519 -C "任意のコメント"

鍵の種類はed25519を選ぶと、RSAより鍵長が短いにもかかわらず高い強度を確保できます。古いサーバー環境でed25519が使えない場合は、代わりに-t rsa -b 4096を指定してRSA鍵を生成してください。コマンドを実行すると保存先パスとパスフレーズの入力を求められます。保存先は既定の~/.ssh/id_ed25519のままEnterで問題ありません。

公開鍵をサーバー登録

生成した公開鍵(拡張子.pubのファイル)をサーバー側の~/.ssh/authorized_keysに追記します。もっとも簡単なのはssh-copy-idコマンドを使う方法です。

ssh-copy-id -i ~/.ssh/id_ed25519.pub ユーザー名@サーバーのIPアドレス

このコマンドが使えない環境(多くのWindows環境)では、公開鍵の中身をコピーし、パスワード認証で一度サーバーにログインしたうえでauthorized_keysファイルに手動で貼り付けます。ディレクトリのパーミッションは.sshが700、authorized_keysが600になっているかを合わせて確認してください。パーミッションが緩いと、サーバー側のsshdが鍵を無視して認証を拒否する設定になっていることがあります。

実際の接続手順

準備が整ったら、実際にリモートサーバーへ接続します。コマンドラインとGUIツール、どちらの方法でも到達点は同じですが、操作感が異なるため自分の用途に合わせて選んでください。

ターミナルからの接続

もっとも基本的な接続コマンドは次の形です。

ssh ユーザー名@サーバーのIPアドレスまたはホスト名

初回接続時は「本当にこのホストに接続しますか」という確認メッセージ(フィンガープリントの確認)が表示されます。接続先が間違いなく意図したサーバーであることを確認したうえで「yes」と入力してください。ポート番号を22番以外に変更している場合は、-pオプションでポート番号を指定します。

ssh -p 2222 ユーザー名@サーバーのIPアドレス

GUIツールでの接続

コマンド操作に慣れていない段階では、WindowsユーザーはPuTTYやTera Termといったオープンソースの接続ツールも選択肢になります。どちらもIPアドレスとポート番号を入力欄に設定し、鍵ファイル(PuTTY形式に変換した.ppkファイル)を指定するだけで接続できます。PuTTYを使う場合、OpenSSH形式で生成した秘密鍵はそのままでは読み込めないため、付属のPuTTYgenツールで.ppk形式に変換する作業が必要です。ファイル転送を重視するなら、同じくGUIで操作できるWinSCPを組み合わせる方法もあります。

config設定で簡略化

接続先が複数ある場合、毎回IPアドレスやポート番号、鍵ファイルのパスを入力するのは非効率です。~/.ssh/configファイルに接続情報をまとめておくと、短いエイリアス名だけで接続できるようになります。

Host myserver
    HostName 203.0.113.10
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

この設定を保存しておけば、以後はssh myserverと入力するだけで同じ接続先にアクセスできます。踏み台サーバー経由で接続する構成の場合も、ProxyJumpディレクティブを使えばconfigファイル内で経路を完結させられます。

よくあるトラブル対処

設定手順どおりに進めても、環境依存のエラーに遭遇することがあります。エラーメッセージごとに原因の傾向が異なるため、メッセージの内容をよく確認したうえで対処してください。

接続拒否への対処法

「Permission denied (publickey)」と表示される場合、原因の多くは以下のいずれかです。

  • 公開鍵がサーバー側のauthorized_keysに正しく登録されていない
  • 接続時に指定している秘密鍵のパスが誤っている
  • サーバー側のsshd_configでPasswordAuthenticationは有効だが、指定した鍵に対応する公開鍵が見つからない

切り分けにはssh -vオプションが有効です。詳細なログが表示され、どの鍵を試し、どの段階で拒否されたのかを確認できます。

タイムアウトの原因

接続要求そのものがサーバーに届かず「Connection timed out」と表示される場合は、ネットワーク経路かファイアウォールの問題が疑われます。まずクラウドの管理画面でセキュリティグループやパケットフィルターの設定を確認し、次にサーバー内部のufwやfirewalldといったファイアウォールソフトの設定を確認する順序で切り分けると原因を特定しやすくなります。社内ネットワークやカフェのWi-Fiなど、クライアント側の通信環境が22番ポートの外部接続をブロックしているケースもあるため、別のネットワークからの接続で再現するかどうかも確認材料になります。

鍵ファイルの権限設定

「UNPROTECTED PRIVATE KEY FILE」という警告が出た場合、秘密鍵ファイルのパーミッションが緩すぎることが原因です。LinuxやmacOSでは次のコマンドで修正します。

chmod 600 ~/.ssh/id_ed25519

Windowsの場合はエクスプローラーのプロパティ画面からセキュリティタブを開き、自分のアカウント以外のアクセス権を削除する操作が必要になります。この設定を怠ると、OpenSSHクライアントが「他のユーザーも読み取れる状態の秘密鍵は危険」と判断し、接続そのものを拒否する挙動になります。

セキュリティを強化する

接続できる状態になったら、サーバー側の設定を見直して不正アクセスのリスクを下げる作業に進みます。ここから先の変更はサーバーのsshd_configファイルを編集する作業を伴うため、必ず設定変更前に現在の接続セッションを維持したまま、別のターミナルで新規接続を試して動作確認をしてから元のセッションを閉じてください。設定ミスによって自分自身がロックアウトされる事故を防ぐための基本手順です。

パスワード認証を無効化

公開鍵認証での接続が確認できたら、サーバー側の/etc/ssh/sshd_configで以下の項目を編集し、パスワードによるログインを無効化します。

PasswordAuthentication no
PermitRootLogin no

編集後はsudo systemctl restart sshdで設定を反映させます。この変更により、鍵を持たない第三者はどれだけパスワードを試してもログインできなくなります。設定変更はサーバーの用途や社内ポリシーに応じて自己責任で実施し、変更前には必ずスナップショットやバックアップを取得しておいてください。

ポート番号を変更する

22番ポートは自動化された不正アクセス試行の標的になりやすいポートです。sshd_configのPort項目を1024番以降の任意の番号に変更することで、機械的なスキャンによるログイン試行の件数を目に見えて減らせます。ポート番号の変更は防御を根本的に強化するものではなく、あくまでノイズを減らす対策の一つとして位置づけ、公開鍵認証や後述のログイン制限と組み合わせて運用してください。

ログイン試行を制限する

fail2banのようなツールを導入すると、一定回数以上ログインに失敗したIPアドレスを自動的に一時ブロックできます。Ubuntuの場合はsudo apt install fail2banで導入し、SSH用のjail設定を有効化するだけで運用を開始できます。あわせてクラウドのファイアウォール機能で、接続元IPアドレスを自宅や会社のIPに限定するアクセス制限を設定すると、外部からの総当たり攻撃をネットワークの入り口で遮断できます。

ツール対応OS操作形式向いている用途
OpenSSH(sshコマンド)Windows/macOS/LinuxCLIスクリプト連携、日常的な運用作業
PuTTYWindowsGUIコマンド操作に不慣れな初心者の接続
Tera TermWindowsGUIマクロ機能を使った定型作業の自動化
WinSCPWindowsGUISSH経由のファイル転送(SFTP/SCP)

よくある質問

SSHのポート番号は変更すべきですか

必須ではありませんが、変更しておくと自動化されたスキャンツールによるログイン試行の件数を減らせます。変更後は忘れずにファイアウォール側の許可設定も新しいポート番号に合わせてください。

秘密鍵を紛失したらどうすればいいですか

手元の秘密鍵を紛失、または漏えいの疑いがある場合は、サーバー側のauthorized_keysから該当する公開鍵の行を削除し、新しい鍵ペアを生成して登録し直してください。パスワード認証を無効化している環境では、コンソールアクセス(クラウドの管理画面から提供される緊急コンソール機能など)を使って復旧作業を行う必要があります。

パスフレーズは必ず設定すべきですか

鍵生成時に空欄のままEnterを押すとパスフレーズなしの秘密鍵を作成できますが、パソコン自体が盗難や不正アクセスに遭った場合、鍵ファイルだけでログインされてしまいます。業務利用のサーバーに接続する鍵には、パスフレーズを設定しておくことをおすすめします。

Windows標準のsshコマンドは使えますか

Windows 10(1809以降)とWindows 11には、OpenSSHクライアントが標準機能として搭載されています。PowerShellやコマンドプロンプトからsshコマンドがそのまま利用できるため、追加のソフトウェアをインストールしなくても基本的な接続作業は完結します。

公開鍵認証とパスワード認証の違いは

パスワード認証はサーバーに登録した文字列と入力した文字列を照合する方式で、総当たり攻撃の標的になりやすい方式です。公開鍵認証は秘密鍵を持つ端末でしか正しい応答を返せないため、パスワードを推測されるリスクそのものが発生しません。

接続速度が遅い場合の対処法は

接続確立に時間がかかる場合、DNSの逆引き設定が原因になっていることがあります。sshd_configのUseDNSをnoに設定すると、サーバー側が接続元IPアドレスの逆引きを行わなくなり、接続開始までの待ち時間が短縮されるケースがあります。

関連記事

まとめ

SSH接続の設定は、鍵ペアの生成、公開鍵のサーバー登録、接続確認という3ステップを押さえれば初心者でも迷わず完了できる作業です。まずは公開鍵認証で接続できる状態を作り、動作確認が取れてからパスワード認証の無効化やポート変更といったセキュリティ設定に進んでください。設定変更の前には必ずバックアップやスナップショットを取得し、別セッションでの接続確認を挟むことで、自分自身がサーバーからロックアウトされる事故を避けられます。バージョンごとの細かい挙動や新しいオプションについては、OpenSSHの公式ドキュメントを都度参照しながら、自分の環境に合わせた運用ルールを整えていってください。

【編集・制作ポリシー】
本記事はInfra Academy編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 編集ポリシーはこちら
ABOUT ME
たから
フリーランスIT講師/エンジニア。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900//サーティファイC言語/情報処理技術者 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営