windowsのクライアントor serverでsshの鍵認証、ホストキーがおかしいときにやること

2023/12/01に公開

WindowsのOpensshはパーミッションが特殊(本来より厳しめ)なので、sshを使って上手く公開鍵暗号
でログインできなかったり、ホストキーのエラーがある。

たいていの場合は、ホストキーを変更したり、別のクライアントから秘密鍵を移動させてきたときに起こると思う。

これは割と厄介で、google検索で調べてもchatGPTで調べてもなかなか正解にたどりつかないと思います。

これに対してMSは下記のPowershellのモジュールを出しているので、これを実行することにより、
WindowsのOpenSSHとして適切なパーミッションに修正することで解決します。

ちなみにこれはPowershellのモジュールを使ってやらずにこんな感じで手動でやってもいいです。

準備

Win32-OpenSSHのプロジェクトから自分の環境にあったReealseを適宜ダウンロードしてください。

すべてのWin32-OpensshのリリースはBetaです。 またPSGalleryにも、このPowershellモジュールはありません(なんでやねん...)。

よって手動インストールになります。

githubから下記のようにダウンロード、PSModulePathにインストールしてください。

このインストールスクリプトはPowershell 5.1でもPowershell Core系でも正しく動作して、
それぞれ別の場所にインストールされます(5.1とcore系で違う場所にインストールされるため。動作としてもこれでよい。)。

$git_tag = "v9.4.0.0p1-Beta"

# 使うアーチテクとを代入
# $arch = "Win32"
# $arch = "Arm"
# $arch = "Arm64"
$arch = "Win64"

Invoke-WebRequest -Uri "https://github.com/PowerShell/Win32-OpenSSH/releases/download/${git_tag}/OpenSSH-${arch}.zip" -OutFile (Join-Path ~/Downloads "OpenSSH-${arch}.zip")

# 一番最初に参照されるPSModulePathにインストールします。
$PSModulePath = ($env:PSModulePath -split ";")[0]

# 展開
Expand-Archive -Path (Join-Path ~/Downloads "OpenSSH-${arch}.zip") -DestinationPath $PSModulePath

# Import-Module OpenSSHUtilsでimportできるようにフォルダ名を変更
Rename-Item -Path (Join-Path $PSModulePath "OpenSSH-${arch}") -NewName "OpenSSHUtils"

使い方

Import-Moduleの部分以外は下にある参考のOpenSSH fix file permissionの内容のコピペです。

実行するとパーミッション的に正しいかもちゃんと表示されます。

Import-Module OpenSSHUtils


Import-Module .\OpenSSHUtils.psd1 -Force
# All routines following -Confirm and -Whatif semantics
# fix permissions on a specified sshd_config
Repair-SshdConfigPermission -FilePath c:\test\sshd_config
# fix permissions on a specified host key
Repair-SshdHostKeyPermission -FilePath c:\test\sshtest_hostkey_ecdsa
# fix permissions on a specified authorized_key
Repair-AuthorizedKeyPermission -FilePath C:\Users\sshtest_ssouser\.ssh\authorized_keys
# fix permissions a specific ssh_config
Repair-UserSshConfigPermission  -FilePath '~\.ssh\config'
# fix permissions on an user key
Repair-UserKeyPermission -FilePath c:\test\sshtest_userssokey_ed25519

参考

OpenSSH fix file permission

Discussion