背景
Windowsで新規ユーザを作成する際、Microsoftアカウントを使用すると、ユーザフォルダ名が意図せず日本語になることがある。この日本語のユーザフォルダ名は、文字コードの問題により様々な環境で不具合を引き起こす。Git Bash上でssh-keygen及びsshコマンドが実行できないという問題もその一つである。
今回は、新規で非日本語名ユーザを作成する以外の方法、すなわち使用中のユーザでssh-keygen及びsshが正しく実行できる方法を検討する。
環境
Windows11 Home 24H2 26100.7171
Git Bash v2.52.0
課題

日本語名ユーザでssh-keygenを実行すると、Saving key時に文字コードの問題で、No such file or directoryとなり、keyが作成できない。
PowerShellで同様の操作を行った場合はkeyを保存することができる。これは、PowerShellとGit Bashで使用しているSSHの実装が異なっているのが要因であり、Powershellは、Windowsに同梱されているC:/Windows/Syetem32/OpenSSH/ssh.exeを使用しており、Git Bashは、Git Bashに同梱されている/usr/bin/sshを使用している。
解決策
Git Bashで使用するSSHの実装を、PowerShellで使用していたSSH実装であるC:/Windows/System32/OpenSSH/ssh.exeに変更することで、日本語名ユーザでSSHできるようにする。
以下にGit Bash上でのコマンドライン操作を記述する。(#の行はコメント)
# ホームディレクトリに移動
cd ~
# ホームディレクトリ直下に./bashrcというファイルを作る
touch ~/.bashrc
# .bashrcにPowerShellで使用していたSSH実装を使用する設定を記述する
echo 'export PATH="/c/Windows/System32/OpenSSH:$PATH"' >> ~/.bashrc
echo 'export PATH="$PATH:/usr/local/bin:/usr/bin:/bin"' >> ~/.bashrc
# .bashrcに記述した設定を適用する
source ~/.bashrc
# 実装が正しく切り替わったかを確認
which ssh
#/c/Windows/System32/OpenSSH/sshがでれば成功
# 実際にssh-keygenを実行する
ssh-keygen -T ed25519
# GitHubへのSSHキーの追加(下の記事参照)
# 最後にSSHできるかのテストをする
ssh -T git@github.com
#Hi! <username>! You've successfully authanticated, but GitHub does not provide shell access.が出れば成功
GitHubへのSSHキーの追加は以下の記事を参照。
これでGit Bash上でssh-keygen,sshを行うことができる。
まとめ
- MSアカウントを使用して作成されたWindowsユーザは日本語名となることがあり、文字コードの差異により、様々な問題を引き起こすことがある。
- Git Bashに同梱されているSSHクライアント(/usr/bin/ssh)が日本語パス(ユーザーフォルダ名)を正しく扱えない問題を回避する。
- Windows標準搭載のOpenSSHクライアント(C:\Windows\System32\OpenSSH\ssh.exe)をGit Bashで使用するように設定を変更する。
- Git Bashの起動時に読み込まれる~/.bashrcファイルに、OpenSSHの実行ファイルパスをPATH環境変数の最優先項目として追記する。
- 新規ユーザーの作成なしに、既存の日本語名ユーザー環境でGit Bashを使用し続けることが可能になった。