1. はじめに
秘密鍵と公開鍵を作成するにあたって、Linuxを用いるか何かしらのソフトウェアの導入が必要と思い込みをしていました。が、恥ずかしながらつい先日Windows10に標準でOpenSSHがインストールされている(ssh-keygenコマンドが使える)ことを知り衝撃を受けました。Linux版とほぼ同じようなのですが、Windows版固有の違いが見られたので紹介します。
※2021年9月よりgithubにて古い暗号アルゴリズム(RSAなど)の利用ができなくなりました。コマンドラインなどでgitコマンドを実行すると以下のようなエラーが発生しますが、その場合はEd25519等の暗号アルゴリズムを用いた新しいキーを生成し、githubに再設定する必要があります。
$ git clone git@github.com:xxxx/xxxx.git
Cloning into 'xxxx'...
ERROR: You're using an RSA key with SHA-1, which is no longer allowed. Please use a newer client or a different key type.
Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
2. 作成方法
秘密鍵と公開鍵を作成する際にパスフレーズとコメントを埋め込むことができますが、私は必要ないと考えているので、ssh-keygenのパラメータにて空文字を指定します。
2.1. Linuxの場合
linuxですと以下の通りとなります。
※二つのファイル(id_rsa:秘密鍵、id_rsa.pub:公開鍵)が生成されます。
$ cd 【秘密鍵と公開鍵を生成したい場所】
# RSA 4096bit
# $ ssh-keygen -q -t rsa -b 4096 -C '' -N '' -f id_rsa
# githubで利用できなくなった。
# https://github.blog/2021-09-01-improving-git-protocol-security-github/
# Ed25519
$ ssh-keygen -q -t ed25519 -C '' -N '' -f id_rsa
2.2. Windowsの場合(コマンドプロンプト)
WindowsのコマンドプロンプトでLinux版のコマンドをそのまま実行すると、 エラー になります エラーとならずに鍵ファイルが生成されますが、passphraseが設定された状態となります(何が設定されているのか不明)。。。
以前はエラーとなってくれていたので、改悪されているように思いますが・・・。
>cd 【秘密鍵と公開鍵を生成したい場所】
>ssh-keygen -q -t ed25519 -C '' -N '' -f id_rsa
#以前は
#Saving key "id_rsa" failed: passphrase is too short (minimum five characters)
#というエラーが出ていたのですが、最近はエラーが出ず、且つよくわからないpassphraseが設定されている状態のkeyが生成されてしまいます。
エラーメッセージ的には、パスフレーズが短すぎますとのことなのですが、実は空文字指定が正しく認識されていないことが原因です。
空文字指定をしたい場合は、正しくは以下のようにコマンドを打つ必要があります。
>cd 【秘密鍵と公開鍵を生成したい場所】
>ssh-keygen.exe -q -t ed25519 -C "" -N "" -f id_rsa
2.3. Windowsの場合(PowerShell)
PowerShellを使用すると上記コマンドでも エラー になります。
>cd 【秘密鍵と公開鍵を生成したい場所】
>ssh-keygen.exe -q -t ed25519 -C "" -N "" -f id_rsa
Enter passphrase (empty for no passphrase): ← え・・・。
正しくは、以下の通りです。
>cd 【秘密鍵と公開鍵を生成したい場所】
>ssh-keygen.exe -q -t ed25519 -C '""' -N '""' -f id_rsa
3. おわりに
Windowsにおいても使えるLinuxコマンドが増えてきていることは歓迎なのですが、今回のケースのようにちょっとした違いで躓くこともあるように思います。本記事がどなたかの一助になれば幸いです。
参考
Automate ssh-keygen -t rsa so it does not ask for a passphrase
お前らのSSH Keysの作り方は間違っている