WindowsのPowerShellを使ってUbuntuに公開鍵を送る

コンピューター

Ubuntuのサーバーを作成しました。テストしているだけならユーザー名+パスワードでも悪くないと思いますが、VPN接続できるように設定して利用したい関係上、公開鍵方式のログイン方法をやっていこうと思います。

Powershell

Windows上では、ずっとコマンドプロンプトで済ませてきましたが、マイクロソフト開発の次世代ターミナルPowerShellは高機能で使いやすそうではあります。

https://www.dospara.co.jp/5info/cts_str_pcuse_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は「統合開発環境」で、コマンドラインの機能開発に使えるツールです。

統合開発環境「PowerShell ISE」とは?使い方を徹底解説!
何度も繰り返し行うWindowsの作業を、簡単に自動化したいと思ったことはありませんか?でもバッチファイルは作り方が難しそう、コマンドプロンプトは敷居が高くて使

ssh-keygen

Powershellもしくはコマンドプロンプトで「ssh-keygen」だけでとりあえずカレントユーザーフォルダの下の「.ssh」ディレクトリにキーが作成されます。

ファイルの保存先をどうする、パスフレーズをどうする、上書きしてもよいかとか、いろいろ聞かれますが、自動化するには、先に保存先ファイルを削除しておけばそれほど大変ではないかも。

ssh-keygen使い方まとめ(自分用) - Qiita
はじめに 自分用のsshの鍵の作り方のメモです。自分が使うであろうオプションの解説だけ。 ローカル(クライアント側)で実行してから公開鍵をサーバ、サービス側に送る。 実行文 : ssh-keygen -t ed25519 -C ...
ssh-keygen -t ed25519 -C "ユーザー名@PC名"  -f ${env:USERPROFILE}/.ssh/id_ed5519

EdDSAが良さそう

Mody氏は最終的に、実装や互換性を重視する場合は公開鍵の鍵長が2048bitもしくは4096bitのRSAを、パフォーマンスやセキュリティを重視する場合はEdDSAを推奨。DSAやECDSAは使わないように呼びかけています。

https://gigazine.net/news/20200828-ssh-encryption-algorithm/

動作するのであれば、セキュリティは高くパフォーマンスが良いほうが良いので、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"
Windows 10 OpenSSH Equivalent of ssh-copy-id
At the moment, Windows 10’s implementation of the OpenSSH client does not have the ssh-copy-id command available. However, a PowerShell one-line command can mim...
Get-Content ${env:USERPROFILE}/.ssh/id_rsa.pub | ssh [email protected] "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
SSH用キーの作り方と登録方法まとめ
SSH公開鍵・秘密鍵作成およびサーバへの登録手順メモ
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"

 

コメント

タイトルとURLをコピーしました