Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Install an SSH Public Key on a Server from Linux, macOS, or Windows

2026年10月06日に「Dev.to」が公開したITニュース「Install an SSH Public Key on a Server from Linux, macOS, or Windows」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

SSH公開鍵をサーバーに設置し、パスワード入力なしで安全に接続する方法をOS別に解説。Linuxは`ssh-copy-id`、macOSは手動か`ssh-copy-id`、WindowsはPowerShellを使う。鍵生成や既存認証の必要性、設置後のテストも重要だ。

ITニュース解説

SSH公開鍵認証とは、サーバーへの安全なログインを可能にする技術である。通常のパスワード認証では、毎回パスワードを入力する必要があり、パスワードが漏洩するリスクも存在するが、公開鍵認証を利用すればこれらの問題が解決される。これは、公開鍵と秘密鍵というペアの鍵を利用して認証を行う仕組みである。

まず、鍵のペアを生成する必要がある。秘密鍵は自分だけが持ち、絶対に他人に公開してはならない。一方、公開鍵はサーバーに登録する。サーバーは、登録された公開鍵と、接続元から提示された秘密鍵がペアであることを確認し、認証を行う。これにより、パスワードを入力する手間が省け、セキュリティも向上するのだ。

鍵ペアの生成は、ssh-keygen -t ed25519というコマンドで行うことができる。ed25519は現在推奨されている強固な暗号方式の一つである。このコマンドを実行すると、通常~/.ssh/ディレクトリに二つのファイルが生成される。.pubで終わるファイル(例: id_ed25519.pub)が公開鍵であり、.pubが付かないファイル(例: id_ed25519)が秘密鍵である。繰り返しになるが、サーバーにインストールするのは公開鍵のみで、秘密鍵は決してサーバーにコピーしたり、他人に教えたりしてはならない。秘密鍵が漏れると、誰でもサーバーにアクセスできるようになる危険性がある。

公開鍵をサーバーにコピーする前には、既存のログイン方法、例えばパスワードや別の有効な鍵を使って、すでにサーバーにログインできる状態であることが必須である。サーバーにログインできない状況では、公開鍵をインストールすることはできないからだ。

Linux環境では、ssh-copy-idという非常に便利なコマンドが利用できる。このコマンドは、ssh-copy-id user@hostという形式で実行する。userはサーバー上のアカウント名、hostはサーバーのホスト名またはIPアドレスに置き換える。このコマンドは、既存の認証方法でサーバーにログインし、ローカルの公開鍵(デフォルトで~/.ssh/id_rsa.pubや~/.ssh/id_ed25519.pubなど)を、サーバーの~/.ssh/authorized_keysファイルに自動的に追加してくれる。このauthorized_keysファイルは、SSH接続を許可する公開鍵が記述される場所である。複数の鍵を所有している場合は、-iオプションを使って、ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostのように、どの公開鍵をインストールするかを明示的に指定できる。サーバーがデフォルト以外のSSHポート(22番以外)を使用している場合は、-pオプションでポート番号を指定する。ssh-copy-idは、すでに鍵がインストールされているかを確認する機能があり、通常は重複して追加されることはない。

macOS環境にはssh-copy-idが標準では含まれていないが、Homebrewというパッケージマネージャーを利用していれば、brew install ssh-copy-idで簡単にインストールできる。インストール後は、Linuxと同じようにssh-copy-idコマンドを使用できる。もし公開鍵の内容をクリップボードにコピーしたいだけであれば、pbcopy < ~/.ssh/id_ed25519.pubというコマンドを使う。これはサーバーへのインストールではなく、Webサービスのフォームなどに貼り付ける際に役立つ。 ssh-copy-idが利用できないUnix系の環境では、手動で公開鍵をインストールする方法がある。これは、ローカルの公開鍵の内容をSSH経由でサーバーに送信し、サーバー側で適切な場所に保存するコマンドである。具体的には、以下のコマンドを実行する。

cat ~/.ssh/id_ed25519.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

このコマンドは、ローカルの公開鍵ファイルの内容をcatコマンドで読み込み、その内容をパイプでsshコマンドを通してサーバーに送る。サーバー側では、まずmkdir -p ~/.sshで.sshディレクトリが存在しない場合に作成し、次にchmod 700 ~/.sshでそのディレクトリのパーミッションを所有者のみが読み書き実行できるように設定する。その後、送られてきた公開鍵の内容をcat >> ~/.ssh/authorized_keysでauthorized_keysファイルの末尾に追加し、最後にchmod 600 ~/.ssh/authorized_keysでauthorized_keysファイルのパーミッションを所有者のみが読み書きできるように設定する。これらのパーミッション設定は、SSH認証が正しく機能するために非常に重要であるため、必ず正確に行う必要がある。

Windows環境のOpenSSHクライアントにもssh-copy-idは含まれていない。PowerShellを使って、macOSの手動インストールと同様のプロセスを実行できる。

Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

ここでGet-Contentはファイルの内容を読み込むPowerShellコマンドであり、$env:USERPROFILE\.ssh\id_ed25519.pubはWindows環境における公開鍵ファイルのパスを示す。引用符内のコマンドはサーバー上で実行され、その内容はmacOSの手動インストールと同様である。Windows Subsystem for Linux (WSL) や Git Bash を利用している場合、これらの環境にssh-copy-idがインストールされていれば、それを利用することも可能だ。ただし、SSHクライアントと公開鍵が同じ環境のものであることを確認する必要がある。

公開鍵のインストールが完了したら、必ず新しいターミナルを開いて接続テストを行う。ssh user@hostコマンドで接続を試み、パスワードを求められずにログインできれば成功である。テストが成功するまでは、元の作業セッションを閉じてはならない。もし新しい接続で問題が発生しても、元のセッションから問題を修正できるためだ。接続に失敗し、パスワードを求められるような場合は、ssh -v user@hostコマンドで詳細なデバッグ出力を確認するとよい。この詳細な情報は、鍵の選択ミスやサーバー側の設定、パーミッションの問題など、原因を特定するのに役立つ。複数の鍵を管理している場合は、SSH設定ファイルで特定の鍵を使用するように設定すると、今後の接続がよりスムーズになる。

公開鍵をインストールするには、ssh-copy-idやPowerShellを使った方法でも、既存の認証方法でサーバーにログインできることが前提となる。もしパスワード認証が無効化されており、かつ有効な鍵も登録されていない状況では、これらのコマンドでは鍵をインストールできない。その場合は、クラウドプロバイダの管理コンソールや、仮想インスタンス作成時に公開鍵を設定する機能など、他の手段を利用して鍵を登録する必要がある。また、WindowsコンピューターをSSHクライアントとして使う場合と、WindowsサーバーがSSH接続を受け入れる場合とでは、鍵ファイルの管理方法が異なる可能性がある点に注意が必要だ。Windows OpenSSHサーバーの場合、Unix系のauthorized_keysの指示がそのまま適用されないこともある。

SSH公開鍵認証を安全かつスムーズに導入するための基本的なパターンは、まず公開鍵(.pubファイル)を選択し、目的のリモートアカウントにインストールし、そして、現在機能しているセッションを閉じずに、新しい接続をテストすることである。この手順をしっかり踏むことで、安全で便利なSSH接続環境を構築できるだろう。

関連コンテンツ

関連IT用語

関連ITニュース