はじめに
SSHでLinuxサーバにログインする際、毎回パスワードを入力するのは少し面倒です。
この記事では、Windows11からLinuxへ公開鍵を転送し、パスワードなしでログインできるようにする手順を、できるだけやさしく、順番に説明します。
🎯 この記事でできること
- SSH鍵の仕組みがわかる
- Windows側でSSH鍵を作成できる
- 公開鍵をLinuxに転送できる
- 公開鍵をLinuxに登録できる
- パスワードなしでSSHログインできる
🌐 IPアドレスとは?
SSHで接続するときは、まず接続先のサーバを指定します。
ssh root@XXX.XXX.XXX.XXX
この XXX.XXX.XXX.XXX が IPアドレス です。
IPアドレスは、サーバの「住所」のようなものです。
🔑 SSH鍵の仕組み
SSH鍵認証では、2つの鍵を使います。
- 秘密鍵:自分のPCの中だけに置く鍵
- 公開鍵:Linuxサーバに置く鍵
この2つが対応していると、SSHでログインできます。
🧰 前提条件
- Windows11を使っている
- LinuxサーバにSSHで接続できる
- 公開鍵ファイルを作成済み、またはこれから作成する
- この記事では公開鍵ファイル名を
id_ed25519.pubとする
🔧 SSH鍵をまだ作っていない場合
まず、Windows側でSSH鍵を作成します。
ここで作られるファイルは、通常 C:\Users\ユーザー名\.ssh\ に保存されます。
① Windows Terminalを起動する
以下のどちらかで起動できます。
- スタートメニューで「Windows Terminal」と検索する
- スタートボタンを右クリックして「ターミナル」を開く
② 鍵を作成するコマンドを実行する
ssh-keygen -t ed25519
このコマンドは、SSH鍵を新しく作るためのものです。
ed25519 は現在よく使われる方式です。
③ 表示される内容と操作
実行すると、次のように聞かれます。
Enter file in which to save the key (C:\Users\ユーザー名\.ssh\id_ed25519):
👉 そのまま Enter を押します。
通常は、表示されている場所にそのまま保存すれば大丈夫です。
Enter passphrase (empty for no passphrase):
👉 ここも Enter で進めます。
今回は初心者向けに、まずはパスフレーズなしで進めます。
Enter same passphrase again:
👉 もう一度 Enter を押します。
④ 作成されるファイル
鍵を作ると、通常は次の2つのファイルができます。
| ファイル名 | 説明 |
|---|---|
id_ed25519 |
秘密鍵。自分のPCの中だけに置く |
id_ed25519.pub |
公開鍵。Linuxサーバに登録する |
🪜 手順全体
これから行う作業の流れは次の通りです。
① 公開鍵をLinuxに転送
まず、Windows側で作られた公開鍵の場所を確認します。
C:\Users\ユーザー名\.ssh\id_ed25519.pub
この .pub が付いているファイルが 公開鍵 です。
ここで大事なのは、サーバへ送るのは公開鍵だけ という点です。
秘密鍵の id_ed25519 は、外に出してはいけません。
①-1 公開鍵のあるフォルダへ移動する
PowerShell または Windows Terminal で、次を実行します。
cd C:\Users\ユーザー名\.ssh
これは、「公開鍵ファイルが置いてある場所に移動する」という意味です。
①-2 公開鍵をLinuxへ転送する
scp .\id_ed25519.pub root@XXX.XXX.XXX.XXX:/root/
このコマンドは、次の2つを同時にしています。
- Windowsの公開鍵ファイルを送る
- Linuxの
/root/に置く
何を意味しているか
-
scp:ファイルを安全にコピーするコマンド -
.\id_ed25519.pub:今いるフォルダにある公開鍵ファイル -
root@XXX.XXX.XXX.XXX:接続先のLinuxサーバ -
:/root/:Linux側の保存先
①-3 すでに接続できる秘密鍵がある場合
すでにLinuxサーバへ接続できる秘密鍵を持っているなら、
その秘密鍵を使って scp を実行できます。
このとき大事なのは、自分がサーバに入るための秘密鍵を使いながら、他人の公開鍵ファイルを転送する という点です。
何をしているのか
-
自分の秘密鍵:
scpがサーバに入るために使う - 他人の公開鍵:サーバへコピーするファイル
- サーバ側の authorized_keys:あとで登録する場所
実行コマンド
scp -i C:\Users\ユーザー名\.ssh\id_ed25519 .\メンバーの公開鍵.pub root@XXX.XXX.XXX.XXX:/root/
このコマンドの意味
-
-i C:\Users\ユーザー名\.ssh\id_ed25519
→ 自分がサーバへ接続するための秘密鍵 -
.\メンバーの公開鍵.pub
→ 転送したい公開鍵ファイル -
root@XXX.XXX.XXX.XXX:/root/
→ 転送先
ここでの流れ
- 自分の秘密鍵でLinuxサーバに接続する
- 公開鍵ファイルをサーバへコピーする
👉 つまり、認証に使う鍵 と 送るファイル は別物です。
② 公開鍵を登録
次に、Linuxサーバにログインして、さきほど転送した公開鍵を登録します。
ssh root@XXX.XXX.XXX.XXX
②-1 転送したファイルがあるか確認する
ls -l /root/id_ed25519.pub
このコマンドは、ファイルが本当に置かれているかを確認しています。
- 表示されればOK
- 表示されなければ、転送に失敗しています
②-2 .ssh ディレクトリがあるか確認する
ls -ld /root/.ssh
.ssh ディレクトリは、SSH関連の設定を置く場所です。
すでにあるなら、そのままでかまいません。
存在しない場合だけ、次を実行します。
mkdir -p /root/.ssh
ここでの -p は、すでにあってもエラーにしない ための指定です。
初心者のうちは、この指定を付けておくと安心です。
②-3 公開鍵を登録する
cat /root/id_ed25519.pub >> /root/.ssh/authorized_keys
このコマンドは、公開鍵の中身を authorized_keys に追加しています。
何をしているのか
-
cat /root/id_ed25519.pub
→ 公開鍵ファイルの中身を表示する -
>> /root/.ssh/authorized_keys
→ その内容をauthorized_keysに追記する
authorized_keys は、このサーバに入ってよい公開鍵の一覧 です。
②-4 登録できたか確認する
cat /root/.ssh/authorized_keys
表示された内容の中に、さきほどの公開鍵があればOKです。
公開鍵は1行で表示されるのが普通です。
③ 権限を設定する
SSHでは、ファイルの権限が適切でないと認証に失敗することがあります。
そのため、次の設定を行います。
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
何をしているのか
-
chmod 700 /root/.ssh
→.sshディレクトリを、所有者だけが扱えるようにする -
chmod 600 /root/.ssh/authorized_keys
→authorized_keysを、所有者だけが読めるようにする
SSHはセキュリティが厳しいので、権限がゆるいとログインを拒否することがあります。
④ 動作確認
ここまでできたら、実際にSSHでログインできるか確認します。
ssh root@XXX.XXX.XXX.XXX
何を確認するのか
- パスワードを聞かれずにログインできるか
- 鍵認証が正しく動いているか
うまくいったとき
- パスワードを求められずにログインできる
- そのままLinuxの画面が表示される
鍵を明示的に指定したい場合
SSHは通常、C:\Users\ユーザー名\.ssh\ にある鍵を自動で使います。
ただし、どの鍵を使うかをはっきりさせたい場合は、-i を付けて指定できます。
ssh -i C:\Users\ユーザー名\.ssh\id_ed25519 root@XXX.XXX.XXX.XXX
これは、この秘密鍵を使って接続する と明示する書き方です。
初心者のうちは、どの鍵を使っているか分かりやすいので便利です。
⚠️ よくあるエラー
Permission denied (publickey)
このエラーは、SSH鍵認証が通らなかったときに出ます。
原因としては、たとえば次のようなものがあります。
- 公開鍵の登録がうまくいっていない
-
authorized_keysの中身が正しくない -
.sshやauthorized_keysの権限が合っていない - 使っている秘密鍵が違う
対処として、まず権限を確認します。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
scpで失敗する
/home/root は存在しない
これは、保存先の指定が違っている可能性があります。
root のホームディレクトリは通常 /root です。
🔒 セキュリティ強化(推奨)
ここまででSSH鍵でログインできるようになりました。
次は、パスワードログインを無効にして、セキュリティを高めます。
なぜやるのか
パスワードは、総当たり攻撃の対象になりやすいです。
鍵認証だけにしておくと、より安全です。
① SSH設定ファイルを開く
nano /etc/ssh/sshd_config
これは、SSHサーバの設定ファイルを編集するためのコマンドです。
② パスワードログインを無効にする
設定ファイルの中で、次の行を探します。
PasswordAuthentication no
もし yes になっていたら no に変更します。
もし行がなければ、追加してもかまいません。
この設定は、パスワードではログインできないようにする という意味です。
③ SSHサービスを再起動する
以下のコマンドを実行します。
UbuntuやDebian系:
systemctl restart ssh
RHEL / CentOS / Rocky Linux など:
systemctl restart sshd
設定を変えただけでは反映されないことがあるので、SSHサービスを再起動します。
⚠️ 注意
この設定を入れる前に、鍵認証でログインできることを必ず確認してください。
もし確認前にパスワードログインを無効にすると、入れなくなる可能性があります。
🎉 まとめ
- WindowsでSSH鍵を作成する
- 公開鍵をLinuxへ転送する
-
authorized_keysに登録する - 権限を整える
- SSH鍵でログインできるか確認する
- 必要ならパスワードログインを無効にする
💬 補足
ホスト名でも接続できます。
ssh root@your-server.example.com
SSH鍵認証は、最初は少し分かりにくいですが、一度仕組みがわかるととても便利です。
サーバ運用ではよく使う基本操作なので、じっくり慣れていくのが大事です。