ねじまきまきまき -Random Note-

やったこと忘れないための雑記

SSHクライアントとしてのVS Code

TeratermじゃなくてVS Codeで直接いじれる環境も作ろうかなっと

だいたいTerminalソフトとしてはTeraTermを愛用しているわけだけど、せっかくVS Codeもあるし、VS CodeSSH開発環境も整えようというあれこれ。

接続できない問題

とはいえ、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で編集したものが他のテキストエディタでは繁栄されていなかったり、その逆が起こったりでそういう意味でも使うのを躊躇する事象が発生した。

Windowsでファイル自体の権限情報触ったのっていつ以来だろう

結局のところ、Windowsではあまり使用しない権限情報を編集することで使用することができるようになった。
ここにたどり着かなかったら駄目だったかもしれない。
qiita.com

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が使用できないというのもあるらしいが、一応そういうこともないのでいいのかもしれない。