LoginSignup
12
9

More than 1 year has passed since last update.

VSCode で SSH するとき RemoteCommand でユーザーが切り替わらないとき

Last updated at Posted at 2023-03-25

VSCode で SSH するとき ~/.ssh/setting.jsonRemoteCommand が効かなくなることがある。

こうなると RemoteCommand sudo su some_user で VSCode そのものが使うユーザーをスイッチできなくなり、直そうにも、その設定が入り組んでいるため時間を浪費する。何度か迷ったのでメモしておく。

VSCode は起動後に実行ユーザーを切り替えられない

VSCode が起動してからターミナルを起動して、ターミナルのユーザーは好きに変えることができる。
だが VSCode の実行ユーザーは切り替えられない。RemoteCommand で初めから実行ユーザーを切り替えておかないといけない。
ログインするユーザーが SSH キーのユーザーのままの操作なら問題ないが、アプリケーションの実行ユーザーは SSH ユーザーとは別のほう事が多く、そうした運用の方がセキュリティが担保されている環境といえる。

勘違いしやすいポイント
VSCode のターミナルのユーザーを変えても、VSCode そのものが使っているユーザーは変わらない🙀

そのまま VSCode でファイル操作してしまうと、ログイン時に使用したユーザーが使われ、意図しないユーザーでファイルを操作すると、アプリケーションが正常に動作しなくなる可能性もあるため、気をつけなければならない。

✅ Good

VSCode の設定は以下のようにする。

setting.json
{
    "remote.SSH.useLocalServer": true,
    "remote.SSH.enableRemoteCommand": true,

    // remotePlatform に名を連ねているとこの設定が優先されてしまい RemoteCommand が効かなくなるのでコメントアウトしておく。
    // 使っていなければ以下まるごと消しても OK
    "remote.SSH.remotePlatform": {
        // "xxxxx-prod-ubuntu": "linux",
        // "yyyyy": "linux",
        "zzzzz": "linux"
    }
}

以下のような SSH 設定で選択的に VSCode を実行できるようになる。

~/.ssh/config
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 そもそも設定がない

setting.json
"remote.ssh.useLocalServer": true, // ❗
"remote.ssh.enableRemoteCommand": true, // ❗

ネット上に小文字になっているパターンが散見される。
これをコピーすると、接続時に RemotePlatform を登録を促されるプロンプトがでて、入れてしまうと remote.SSH.remotePlatform が追加されてしまい下のパターンになりハマる。

remote.SSH.remotePlatform ディレクティブに設定がある

この設定があると RemoteCommand=none になり無視される

setting.json
{
    "remote.SSH.remotePlatform": {
        "xxxxx-prod-ubuntu": "linux", // ❗
    }
}

RequestTTY の設定がない または yes 以外になっている

VSCode そのものの接続確立には影響しないためなくても良いが、ターミナルで ssh するときプロンプトが返ってこなくなる。

    RequestTTY yes

ネット上に true になっている文献も見つかるが正しくは yes。一応 true でも効力は発揮する。
また RequestTTY を true にしないとプロンプトの応答が返ってこなくなるだけでだけで、 sudo できないわけではない。これも誤解している記事が多い。

Sources

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9