うまくいく事例
Windows端末でソフトウェア開発を行っている場合、TeratermやMobaXTermなどのターミナルエミュレーターでLinux端末に接続する機会は往々にしてあると思います。
私の場合、これまで占有Windows 10クライアントからターミナルエミュレーターを利用してきたため、SSHに利用する秘密鍵等についても、ディレクトリパスを簡単にするために何気なくCドライブ直下に置いたWorkspaceディレクトリにて管理していました。
これらのターミナルエミュレーターだと、秘密鍵の指定にたとえばC:\workspace\keys
配下に設置したファイルを指定しても、問題なく接続できます。
(もしかしたら今後のアップデート次第でできなくなる可能性もありますが…)
うまくいかない事例
しかし、VSCodeのRemote Developmentプラグインを利用してSSH接続しようとすると、以下のような設定ではエラーが出て接続できません。
設定:
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host remoteVM
HostName XXXX
User myuserid
IdentityFile C:\workspace\id_rsa
接続NGとなるログ:
[15:17:36.314] Got stderr from ssh: OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4
[15:17:36.316] Running script with connection command: ssh -D 55695 remoteVM bash
[15:17:36.321] Install and start server if needed
[15:17:36.757] >
[15:17:36.757] Got some output, clearing connection timeout
> Warning: Permanently added 'XXXX' (ECDSA) to the list of known hosts.
>
>
[15:17:39.816] > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions for 'C:\\workspace\\id_rsa' are too open.
> It is required that your private key files are NOT accessible by others.
> This private key will be ignored.
> Load key "C:\\workspace\\id_rsa": bad permissions
> id@XXXX: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
>
> プロセスが、存在しないパイプに書き込もうとしました。
>
[15:17:40.108] "install" terminal command done
[15:17:40.108] Install terminal quit with output: プロセスが、存在しないパイプに書き込もうとしました。
[15:17:40.108] Received install output: プロセスが、存在しないパイプに書き込もうとしました。
[15:17:40.109] Failed to parse remote port from server output: プロセスが、存在しないパイプに書き込もうとしました。
[15:17:40.110]
[15:17:40.111] TELEMETRY: {"eventName":"resolver","properties":{"outcome":"failure","reason":"UnparsableOutput"},"measures":{"resolveAttempts":1,"retries":1}}
[15:17:40.111] ------
対処方法
bad permissionsとか書いてあるので、最初はファイルパーミッションの問題かと思ってgit bash
からchmod 700 id_rsa
などでパーミッションを修正したりしてみましたが、変わらず接続不可となります。
考えればすぐわかる問題かもしれませんが、Windowsの場合、秘密鍵のようなパーソナルなデータは、Cドライブ直下のような全ユーザーで共有されるようなディレクトリではなく、各利用者のパーソナルデータを格納するための"Users"配下に設置する必要がありました。
以下の通り、ファイルの置き場所を変更すれば、アクセス可能となります。
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host remoteVM
HostName XXXX
User myuserid
IdentityFile C:\Users\myid\.ssh\id_rsa
自分自身の占有マシンであろうが、秘密鍵の設置場所には注意が必要ですね…。