WindowsからLinuxに公開鍵を使ってSSH接続

# はじめに
自PCからLinuxにSSH接続する際にパスワード入力なしで、コマンドプロンプトから``ssh ホスト名``というコマンドのみでアクセスできる方法について紹介します。
本手法を用いるメリットはパスワードの管理が楽になることです。


## windows側の処理
* OpenSSHのインストール
以下コマンドを``コマンドプロンプト``or``Powershell``で実行してOpensshがインストールされているか確認してください。

```
ssh -V
```

インストールされている場合は以下処理は不要です。インストールされていない場合は、``Powershell``を管理者モードで開いてください。

以下コマンドでインストールが可能です。
```
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
```

以下のような表示になればインストール成功です。
```
Path          :
Online        : True
RestartNeeded : False
```


* パスを通す
以下のように環境変数の``システム環境変数``→``path``→``編集``→``新規作成``の順に進み以下のように``C:\Windows\System32\OpenSSH\``のパスを追加する。



* 公開鍵・秘密鍵の生成
まず、鍵を保管するディレクトリ(``C:\Users\xxxx\.ssh``)を作成します。
``コマンドプロンプト``or``Powershell``を開き、上記パスに移動します。
以下コマンドで公開鍵を作成します。
```
ssh-keygen -t rsa -C comment -f <ファイル名>
```
パスフレーズの入力を求められますが、設定しない場合は``Enter``で進んでください。以下の表示になればOKです。

``C:\Users\xxxx\.ssh``に以下のファイルがあればOK
```
<ファイル名>        :秘密鍵
<ファイル名>.pub    :公開鍵
```

秘密鍵は大切に保管しておいてください。

* 公開鍵をSSH接続したいマシンに転送
上記の処理で作成した公開鍵をSSH接続したいマシンに転送します。
``C:\Users\xxxx\.ssh``をカレントディレクトリにして、以下コマンドを実行してください。
```
scp <ファイル名>.pub name@xxx.yyy.zzz.zzz:<ファイル転送ディレクトリ>
```
上記は``server_name``にファイルを転送する例です。適宜マシンに応じて変えてください。パスワードの入力が求められますので、SSH接続したいマシンのパスワードを入力してください。

* configファイルの作成
``C:\Users\xxxx\.ssh``ディレクトリにconfigファイルを作成します。内容は以下のようにしてください。
```
Host server_name1
    HostName xxx.yyy.zzz.zzz
    User name
    Port 22
    IdentityFile C:\Users\xxx\.ssh\<ファイル名>
    ServerAliveInterval 60
```

マシンが増えると以下のようになっていきます。
```
Host server_name1
    HostName xxx.yyy.zzz.zzz
    User name
    Port 22
    IdentityFile C:\Users\xxx\.ssh\<ファイル名>
    ServerAliveInterval 60

Host server_name2
    HostName xxx.yyy.zzz.zzz
    User name
    Port 22
    IdentityFile C:\Users\xxx\.ssh\<ファイル名>
    ServerAliveInterval 60

Host server_name3
    HostName xxx.yyy.zzz.zzz
    User name
    Port 22
    IdentityFile C:\Users\xxx\.ssh\<ファイル名>
    ServerAliveInterval 60
```

この設定を記述することで、``ssh server_name1``と入力することでssh接続できるはずです。（##ssh接続したいマシン側の処理を行っている必要があります。##）

## 参考文献
* [Windows 用 OpenSSH の概要^](https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse?tabs=powershell&pivots=windows-server-2025)
* [Qiita : Windows 10 に OpenSSH サーバをインストールする](https://qiita.com/iShinkai/items/a12c9d26f8f4264897f9)
* [Qiita : Windows -> Linux へssh接続で公開鍵認証を実装](https://qiita.com/hemuwan-kazu/items/6c927bc493787c03e4f6)


## SSH接続したいマシン側の処理
* サーバにアクセス
以下コマンドを``コマンドプロンプト``or``Powershell``でサーバにssh接続してください。
```
ssh name@xxx.yyy.zzz.zzz
```

* 公開鍵の登録
上記で転送したファイルを``~/.ssh``に移動します。
```
cd <ファイル転送ディレクトリ>>
chmod 600 <ファイル名>.pub
sudo mv <ファイル名>.pub ~/.ssh
```

既に``~/.ssh``に``authorized_keys``ファイルが存在すれば以下コマンドを実行してください。
```
cat <ファイル名>.pub >> authorized_key
```

``authorized_keys``が存在しない場合は以下コマンドを実行してください。
```
mv <ファイル名>.pub authorized_key
```


* configファイルの設定

以下の設定は確認しておいてください。

以下は、公開鍵の場所を指定する設定です。
```
AuthorizedKeysFile      .ssh/authorized_keys
```


以下は公開鍵認証をみとめるかどうかのパラメータでデフォルトでyesになっているはずです。なっていない場合は以下のコメントアウトを解除してください。
```
#PubkeyAuthentication yes
```

以下はパスワード認証を認める設定です。デフォルトでyesのはずです。
```
#PasswordAuthentication yes
```

## 参考文献
* [Qiita : SSH公開鍵認証メモ](https://qiita.com/kobake@github/items/d866392c07b03da099bf)
* [Qiita : catでファイルを連結するとき](https://qiita.com/tkj/items/761cc6fcc6cba0159ab0)
* [Qiita : SSHの公開鍵ってなに?](https://qiita.com/angel_p_57/items/19eda15576b3dceb7608)