VSCode で SSH するとき ~/.ssh/setting.json
の RemoteCommand
が効かなくなることがある。
こうなると RemoteCommand sudo su some_user
で VSCode そのものが使うユーザーをスイッチできなくなり、直そうにも、その設定が入り組んでいるため時間を浪費する。何度か迷ったのでメモしておく。
VSCode は起動後に実行ユーザーを切り替えられない
VSCode が起動してからターミナルを起動して、ターミナルのユーザーは好きに変えることができる。
だが VSCode の実行ユーザーは切り替えられない。RemoteCommand で初めから実行ユーザーを切り替えておかないといけない。
ログインするユーザーが SSH キーのユーザーのままの操作なら問題ないが、アプリケーションの実行ユーザーは SSH ユーザーとは別のほう事が多く、そうした運用の方がセキュリティが担保されている環境といえる。
勘違いしやすいポイント
VSCode のターミナルのユーザーを変えても、VSCode そのものが使っているユーザーは変わらない🙀
そのまま VSCode でファイル操作してしまうと、ログイン時に使用したユーザーが使われ、意図しないユーザーでファイルを操作すると、アプリケーションが正常に動作しなくなる可能性もあるため、気をつけなければならない。
✅ Good
VSCode の設定は以下のようにする。
{
"remote.SSH.useLocalServer": true,
"remote.SSH.enableRemoteCommand": true,
// remotePlatform に名を連ねているとこの設定が優先されてしまい RemoteCommand が効かなくなるのでコメントアウトしておく。
// 使っていなければ以下まるごと消しても OK
"remote.SSH.remotePlatform": {
// "xxxxx-prod-ubuntu": "linux",
// "yyyyy": "linux",
"zzzzz": "linux"
}
}
以下のような SSH 設定で選択的に VSCode を実行できるようになる。
Host xxxxx-prod*
HostName <DOMAIN or IP>
User cray
Port 22
IdentityFile <PATH>
RequestTTY yes
# アプリケーションのユーザー(例:ubuntu)で作業をするとき
Host xxxxx-prod-ubuntu
RemoteCommand sudo su ubuntu
# 個人のユーザー(例:cray)で作業をするとき
Host xxxxx-prod-cray
# root で作業をするとき
Host xxxxx-prod-root
RemoteCommand sudo su -
🚫よくある Bad パターン
設定属性の SSH 部分が小文字になっていて効いてない or そもそも設定がない
"remote.ssh.useLocalServer": true, // ❗
"remote.ssh.enableRemoteCommand": true, // ❗
ネット上に小文字になっているパターンが散見される。
これをコピーすると、接続時に RemotePlatform を登録を促されるプロンプトがでて、入れてしまうと remote.SSH.remotePlatform
が追加されてしまい下のパターンになりハマる。
remote.SSH.remotePlatform ディレクティブに設定がある
この設定があると RemoteCommand=none
になり無視される
{
"remote.SSH.remotePlatform": {
"xxxxx-prod-ubuntu": "linux", // ❗
}
}
RequestTTY の設定がない または yes 以外になっている
VSCode そのものの接続確立には影響しないためなくても良いが、ターミナルで ssh するときプロンプトが返ってこなくなる。
RequestTTY yes
ネット上に true
になっている文献も見つかるが正しくは yes
。一応 true
でも効力は発揮する。
また RequestTTY を true
にしないとプロンプトの応答が返ってこなくなるだけでだけで、 sudo
できないわけではない。これも誤解している記事が多い。
Sources