LoginSignup
1
3

More than 1 year has passed since last update.

Windows -> Linux へssh接続で公開鍵認証を実装

Last updated at Posted at 2021-06-06

2021.06.05
Windows から Linux へssh接続時に公開鍵認証を実装できたので備忘録として。

TeraTermもしくはPowerShellを使うのが一般的らしいが、ひねくれているのですべてコマンドプロンプトで実行してみた。

【参考】
■Windows10で公開鍵認証の鍵ペアを生成してサーバーにSSH接続する
https://onoredekaiketsu.com/generate-key-pair-for-public-key-authentication-in-windows10-and-connect-to-server-with-ssh/

■manページ — SSHD_CONFIG
https://nxmnpg.lemoda.net/ja/5/sshd_config

■SCPコマンドでローカルのファイルをサーバにアップ&サーバ上のファイルをDL
https://qiita.com/ritukiii/items/c724f09fe66fedf2618b

■openssh-serverが入っているのにsshでログインできない
https://killingout-n-bita.hateblo.jp/entry/2018/07/08/162520

1.Windows 側で公開鍵・秘密鍵を作成。

まずは鍵を入れておくためのフォルダを作成する。
コマンドプロンプトを起動し、以下のコマンドを実行。
(ついでにcdコマンドでカレントディレクトリを作成したフォルダにしておく)

C:¥Users¥hemuwan> mkdir .ssh
C:¥Users¥hemuwan> cd .ssh
C:¥Users¥hemuwan> .ssh
C:¥Users¥hemuwan¥.ssh> 

次に公開鍵と秘密鍵のペアを作成する。

C:¥Users¥hemuwan¥.ssh> ssh-keygen

ssh-keygenコマンドを実行すると、パスフレーズの入力を求められる。
任意のパスフレーズを2回入力。(忘れたらまた作り直しになるよ)

-tオプションで鍵の方式を指定できるけど、今回はお試しでデフォルトのRSAを使ってみる。

パスフレーズを入力したら、dirコマンドなどでC:\Users\hemuwan\.ssh 配下に

  • id_rsa
  • id_rsa.pub 

が生成されたことを確認する。
「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵となる。

ユーザー認証で公開鍵認証を用いるために、「公開鍵」の方をSSHサーバーとなるLinuxへ送り付ける。

「秘密鍵」はログイン時に使う。

2.Linux側のユーザに「公開鍵」を送付

.sshフォルダで、以下コマンドを実行。

C:¥Users¥hemuwan¥.ssh> scp -P <ポート番号> id_rsa.pub <ユーザ名>@<IPアドレス>:ClientPubKey

scpコマンドを使い、「id_rsa」を<ユーザ名>のホームディレクトリに「ClientPubkey」と名前をつけて送付している。
(最近ではプロトコルが古くなり、scpコマンドの使用は推奨されていないらしい。OpenSSH開発プロジェクトではsftpやrsyncの利用が増えているとか)

3.Linux 側で、もらった公開鍵を.sshに配置

もらった公開鍵を.ssh 配下に、authorized_keys という名前で配置する。
(これの名前間違えててハマった。必ずauthorized_keysにするかconfig変えるかをする)

以下のコマンドはホームディレクトリに移動した後、catコマンドで表示するものを>>でリダイレクトし、.ssh/配下にauthorized_keysという名前のファイルにして保存するというコマンド。

$ cd ~
$ cat ClientPubKey >> ./.ssh/authorized_keys

4./etc/ssh/sshd_config を編集。

最終的にこうした、というのだけ書く。

Port <任意のポート番号>

デフォルトは22。セキュリティ的にデフォルトの番号から変えた方がよいとのこと。
(今回の公開鍵認証の実装に関しては変えても変えなくてもどっちでも)

HostKey /etc/ssh/ssh_host_rsa_key

これないとホスト認証ができない。
ないときはsudo dpkg-reconfigure openssh-serverとかすると、再作成してくれるはず。
(参考:https://killingout-n-bita.hateblo.jp/entry/2018/07/08/162520 より)

PubkeyAuthentication yes

公開鍵認証を許可するかどうか。デフォはno。

AuthorizedKeysFile  .ssh/authorized_keys .ssh/authorized_keys2

ユーザ認証のさいに使われる公開鍵を格納しているファイル名を指定。
(設定はそのまま。コメントアウトの#消しただけ)

PasswordAuthentication no

パスワード認証を許可するか。デフォはyes
(なぜかnoにしても公開鍵認証の設定終わるまでパスで入れていた。どうして、、)

PermitEmptyPasswords no

パスワード認証が許可されているとき、パス文字が空のアカウントに対し、 サーバがログインを許可するかどうかを指定。デフォはno。

PermitRootLogin no

ssh を使って、rootがログインできるかどうかを指定。デフォはno。

AllowUsers <任意のユーザ名>

ssh接続を許可するユーザ。
デフォルトでは書かれていないので必要に応じて末尾に書く。

Protocol 2

サポートするプロトコルのバージョンを指定。引数は1,2のみ。
デフォルトでは書かれていないので必要に応じて末尾に書く。

以上の設定が終わったら、読みこみなおす。

$ sudo systemctl restart sshd

5.Windows側から接続を試みる。

コマンドプロンプトから以下のコマンド実行。

ssh <IPアドレス> -l <ユーザ名> -p <ポート番号> -i C:¥Users¥henuwan¥.ssh¥id_rsa

ログイン時、鍵を作った時のパスフレーズ求められる。
(テラタームでも成功した。)

二回目以降は、-i オプション以降なくてもパスフレーズを求められ、入力するとログインできた。

おわりに

ようやく公開鍵認証を実装できた。
(なんやかんや行き詰ったりして1日つぶれた)
今の状態だと、パスワード同様にパスフレーズを忘れてしまうと、
ログインできなくなる。ssh-agent などを使って、自動ログインできるようにしたいところ。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3