SSHクライアントとしてのVS Code
TeratermじゃなくてVS Codeで直接いじれる環境も作ろうかなっと
だいたいTerminalソフトとしてはTeraTermを愛用しているわけだけど、せっかくVS Codeもあるし、VS CodeのSSH開発環境も整えようというあれこれ。
接続できない問題
とはいえ、2台目の構築だったのでそんなに手間取ることもないだろうなって思ったら、こんな感じのエラーが出てうまくいかなかった。
[xx:xx:xx.xxx] Log Level: 2 [xx:xx:xx.xxx] remote-ssh@0.63.0 [xx:xx:xx.xxx] win32 x64 [xx:xx:xx.xxx] SSH Resolver called for "ssh-remote+hogehoge.hogehoge", attempt 1 [xx:xx:xx.xxx] "remote.SSH.useLocalServer": false [xx:xx:xx.xxx] "remote.SSH.showLoginTerminal": false [xx:xx:xx.xxx] "remote.SSH.remotePlatform": {} [xx:xx:xx.xxx] "remote.SSH.sshPath": undefined [xx:xx:xx.xxx] "remote.SSH.sshConfigurationFile": undefined [xx:xx:xx.xxx] "remote.SSH.useFlock": true [xx:xx:xx.xxx] "remote.SSH.lockfilesInTmp": false [xx:xx:xx.xxx] "remote.SSH.localServerDownload": auto [xx:xx:xx.xxx] "remote.SSH.remoteServerListenOnSocket": false [xx:xx:xx.xxx] "remote.SSH.showLoginTerminal": false [xx:xx:xx.xxx] SSH Resolver called for host: hogehoge.hogehoge [xx:xx:xx.xxx] Setting up SSH remote "hogehoge.hogehoge" [xx:xx:xx.xxx] Using commit id "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" and quality "stable" for server [xx:xx:xx.xxx] Install and start server if needed [xx:xx:xx.xxx] Checking ssh with "ssh -V" [xx:xx:xx.xxx] > OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5 [xx:xx:xx.xxx] Running script with connection command: ssh -T -D 65312 "hogehoge.hogehoge" bash [xx:xx:xx.xxx] Terminal shell path: C:\Windows\System32\cmd.exe [xx:xx:xx.xxx] > The authenticity of host '[hogehoge.hogehoge]:XXXX ([XXX.XXX.XXX.XXX]:XXXX)' > can't be established. > ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX > Are you sure you want to continue connecting (yes/no)?]0;C:\Windows\System32\cmd.exe [xx:xx:xx.xxx] Got some output, clearing connection timeout [xx:xx:xx.xxx] Detected fingerprint confirmation message [xx:xx:xx.xxx] Showing fingerprint confirmation dialog [xx:xx:xx.xxx] Got fingerprint response: yes [xx:xx:xx.xxx] "install" wrote data to terminal: "yes" [xx:xx:xx.xxx] > y [xx:xx:xx.xxx] > Are you sure you want to continue connecting (yes/no)? yes > Warning: Permanently added '[hogehoge.hogehoge]:XXXX,[XXX.XXX.XXX.XXX]:XXXX' > (ECDSA) to the list of known hosts. [xx:xx:xx.xxx] > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ [xx:xx:xx.xxx] > @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > Permissions for 'XXXXXXXXXXXXXX//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 "XXXXXXXXXXXXXX//id_rsa": bad permissions > XXXX@hogehoge.hogehoge: Permission denied (publickey). > プロセスが、存在しないパイプに書き込もうとしました。 > [xx:xx:xx.xxx] "install" terminal command done [xx:xx:xx.xxx] Install terminal quit with output: プロセスが、存在しないパイプに書き込もうとしました。 [xx:xx:xx.xxx] Received install output: プロセスが、存在しないパイプに書き込もうとしました。 [xx:xx:xx.xxx] Stopped parsing output early. Remaining text: プロセスが、存在しないパイプに書き込もうとしました。 [xx:xx:xx.xxx] Failed to parse remote port from server output [xx:xx:xx.xxx] Resolver error: Error: at Function.Create (c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-ssh-0.63.0\out\extension.js:1:64027) at Object.t.handleInstallOutput (c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-ssh-0.63.0\out\extension.js:1:62766) at k (c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-ssh-0.63.0\out\extension.js:1:312915) at processTicksAndRejections (internal/process/task_queues.js:94:5) at async c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-ssh-0.63.0\out\extension.js:1:310801 at async Object.t.withShowDetailsEvent (c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-ssh-0.63.0\out\extension.js:1:405790) at async Object.t.resolve (c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-ssh-0.63.0\out\extension.js:1:314454) at async c:\Users\user\.vscode\extensions\ms-vscode-remote.remote-ssh-0.63.0\out\extension.js:127:110333 [xx:xx:xx.xxx] ------
見た感じPrivate Keyの権限問題だったんだけど、Private Key自体は開けるし、なんでだろうと思ってconfigファイルをC:\Users\ユーザ名/.ssh/configからC:\ProgramData\ssh\ssh_configに移動したりしたんだけど結局駄目だった。
というか、C:\ProgramData\ssh\ssh_configに至ってはVS Codeで編集したものが他のテキストエディタでは繁栄されていなかったり、その逆が起こったりでそういう意味でも使うのを躊躇する事象が発生した。
TerminalソフトとVS Codeのttyについて
TerminalソフトなんかでサーバOSに接続した場合、wとかwhoコマンドでセッション情報を確認することがよくあると思う。
個人だとそうはないかもしれないけど、チーム開発だとあるよね。
TeraTermなんかでももちろんそうで、Teratermを使用した場合のwhoコマンドの結果はこんな感じになる。
$ who xxxxxx pts/0 2021-01-31 16:54 (XXXXXXXXXXXXXXXXXXXXXXXXXXXX)
これに対して、VS Codeの場合はwとかwhoではセッション情報が帰ってこない。
(設定ちゃんとやればいいのかもしれないけど)
これに対してpsコマンドでログイン状態を見てみるとこういうことになっていた。
Teraterm root 1432 1 0 16:54 ? 00:00:00 sshd: xxxxxx [priv] xxxxxx 1434 1432 0 16:54 ? 00:00:00 sshd: xxxxxx@pts/0 VS Code root 1603 1 0 17:05 ? 00:00:00 /usr/sbin/sshd -D root 5324 1603 0 18:22 ? 00:00:00 sshd: xxxxxx [priv] xxxxxx 5326 5324 0 18:22 ? 00:00:00 sshd: xxxxxx@notty
面白いのはTeratermではpts/0ということなので、仮想端末情報が割り当てられている。
それに対してVS Codeでは仮想端末情報が割り当てられていないため、nottyとなっていること。
ttyが割り当てられていないため、wやwhoで異なる結果となったというのは納得できるところ。
ログインシェルの種類によってはVS CodeのRemote-SSHが使用できないというのもあるらしいが、一応そういうこともないのでいいのかもしれない。