Ubuntuのサーバーを作成しました。テストしているだけならユーザー名+パスワードでも悪くないと思いますが、VPN接続できるように設定して利用したい関係上、公開鍵方式のログイン方法をやっていこうと思います。
Powershell
Windows上では、ずっとコマンドプロンプトで済ませてきましたが、マイクロソフト開発の次世代ターミナルPowerShellは高機能で使いやすそうではあります。
気になるところ
Linuxコマンドで「ls」だったファイルリストがDOS系のコマンドプロンプトでは「dir」でした。これがLinuxコマンドと同じ「ls」も使えるようになったり、Linuxでファイル内容表示をする「cat」がWindows Powershellでも挙動が若干違うものの使えたりと良いところが多そうです。
ダウンロードとインストール
Windows 10ならWindows Powershellが含まれています。マイクロソフトページからダウンロードしてインストールすると、Powershell 7がインストールされます。インストールしてみると、PowerShell関係のプログラムがたくさんになってしまいました。
Windows Powershell、Windows PowerShell ISE、Windows PowerShell ISE (x86)、PowerShell 7 (x64)、Developer PowerShell for VS 2019….少しづつ違うものがいつの間にかたくさん集まっています。
ISEは「統合開発環境」で、コマンドラインの機能開発に使えるツールです。

ssh-keygen
Powershellもしくはコマンドプロンプトで「ssh-keygen」だけでとりあえずカレントユーザーフォルダの下の「.ssh」ディレクトリにキーが作成されます。
ファイルの保存先をどうする、パスフレーズをどうする、上書きしてもよいかとか、いろいろ聞かれますが、自動化するには、先に保存先ファイルを削除しておけばそれほど大変ではないかも。

ssh-keygen -t ed25519 -C "ユーザー名@PC名" -f ${env:USERPROFILE}/.ssh/id_ed5519
EdDSAが良さそう
Mody氏は最終的に、実装や互換性を重視する場合は公開鍵の鍵長が2048bitもしくは4096bitのRSAを、パフォーマンスやセキュリティを重視する場合はEdDSAを推奨。DSAやECDSAは使わないように呼びかけています。
動作するのであれば、セキュリティは高くパフォーマンスが良いほうが良いので、EdDSAが一番良さそうですね。ただ、VPNで使う予定のSoftEtherは現時点では2048bitまでのRSAしか対応していません。
SoftEther VPN で使用することができる証明書は、X.509 形式で PKI アルゴリズムに RSA が使用されており、公開鍵および秘密鍵のビット長が 1,024bit または 2,048bit のものです。また、X.509 証明書のバージョンは、「バージョン 1 以降」のものであれば使用することができますが、一部の拡張フィルードについては非対応 (その内容を無視する) である場合があります。SoftEther VPN の各モジュールすべてで認識することができる「サブジェクト」内の値は、「CN」、「O」、「OU」、「C」、「ST」および「L」の 6 個です。
2.2 ユーザー認証 - SoftEther VPN プロジェクト
ssh-copy-id
LinuxでSSHログイン用に公開鍵をサーバーに送り込む「ssh-copy-id」コマンドがWindowsにはないので、Powershellで使えるコマンドがいろいろな人によって作られています。
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh サーバーホスト名 "cat >> .ssh/authorized_keys"
Get-Content ${env:USERPROFILE}/.ssh/id_rsa.pub | ssh [email protected] "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"

cat $env:USERPROFILE/.ssh/id_rsa.pub | ssh [email protected] "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
トライアンドエラーで・・・
PowerShell 7とUbuntuで試してみたのですが、上記の両方ともうまく行きませんでした。上はすでにファイルが存在していない場合には動かないようで、下はGet-Contentでは動かなかったのと、cat >> の後ろが.ssh/authorized_keysでは動かず、./.ssh/authorized_keysで動きました。
cat $env:USERPROFILE/.ssh/id_rsa.pub | ssh サーバーユーザー名@ホスト名 "umask 077; test -d .ssh || mkdir .ssh ; cat >> ./.ssh/authorized_keys || exit 1"
コメント