— 基本は Remote-SSH、ダメなら VS Code Server、最終手段は GUI 転送 —
TL;DR
- 第一選択:Remote-SSH … UIはローカル描画で軽快。拡張もほぼそのまま動作。
- 代替案:VS Code Server(code-server など)… PAM/シェルが特殊・古い glibc 等で Remote-SSH が安定しない時に有効。HTTPS/リバプロ保護は必須。
- 最終手段:フル GUI 転送(X11/Wayland, VNC/RDP)… 動くが重い。遅延・帯域に弱く、保守も重たい。
この記事でわかること
- SSH 先(研究室サーバー/HPC/社内Linux 等)で VS Code を使い、GitHub Copilot / Claude Code / OpenAI API系の AI コーディング支援を快適・安全・高速に動かすための実践指針
- Remote-SSH / VS Code Server / GUI 転送の三方式を、要件・相性・セキュリティ・保守性の観点で漏れなく比較
- つまずきやすい CentOS7(glibc 2.17) / PAM・ログインスクリプトの干渉 / NFS ホーム 等、現場で頻出する落とし穴と回避策
- 「どの方式を選ぶべきか?」の判断フローと、トラブル時の切替えガイド
前提と用語整理
- 対象:リモートの Linux サーバー(Ubuntu/Debian/RHEL系/CentOS 等)に SSH 接続できる開発者
- クライアント:手元 PC(Windows/macOS/Linux)で VS Code を使用
- AI 拡張:GitHub Copilot / Claude Code(Anthropic) / OpenAI API 連携拡張(Codex は終了。代替は Continue 等)
三方式の概観
1) Remote-SSH(推奨の第一選択)
-
仕組み:手元の VS Code から SSH でリモートに接続 → VS Code Server(バックエンド)を自動配備。UI は手元で描画。
-
強み
- 軽快:画面はローカル描画、ネットワーク影響が小さい
- 導入が簡単:サーバーに GUI も VS Code 本体も不要(初回自動展開)
- 拡張互換:Copilot / Claude Code / Continue などそのまま使える
- 安全:通信は SSH 経由(ポート 22 だけで良い)
-
弱み(代表例)
-
古い glibc(例:CentOS 7, glibc 2.17)だと落ちる:拡張ホスト/ptyHost が
exit code 127で即死、署名検証エラー等 -
ログインスクリプトの出力干渉:
~/.bashrcや/etc/profile.d/*.shが非対話シェルでも出力→解析失敗 - NFS の遅さ/不安定:VS Code Server を NFS に置くとファイル監視・ロック競合で不安定
-
古い glibc(例:CentOS 7, glibc 2.17)だと落ちる:拡張ホスト/ptyHost が
2) VS Code Server(自前ホスト / code-server 等)
-
仕組み:サーバー側で Web 版 VS Code(code-server 等)を起動 → ブラウザでアクセス
-
強み
- Remote-SSH が使えない環境でも動かせる(PAM/シェルが特殊、SSH 制約、古い glibc など)
- クライアントが軽い:ブラウザだけで OK(低スペPC / タブレットでも)
-
弱み
- セットアップ責務が増える:サービス化、HTTPS/認証/リバプロ 等のセキュリティ設計が必須
- 一部拡張で挙動差:Copilot の初回認証など手順が増えるケースあり
- 体感は Remote-SSH より遅い:全 UI がネットワーク越し
3) フル GUI 転送(X11/Wayland 転送 / VNC / RDP)
- 仕組み:リモートで VS Code 本体を起動、画面転送で操作
- 強み:全機能がそのまま動く(拡張も GUI も完全同等)
- 弱み:重い(遅延・帯域に非常に弱い)、構築・保守が重たい(デスクトップ環境+VNC/RDP)
比較表(要件/性能/保守/セキュリティ/拡張互換)
| 観点 | Remote-SSH | VS Code Server(code-server 等) | GUI 転送(X11/VNC/RDP) |
|---|---|---|---|
| 体感性能 | ◎(UI はローカル描画) | ○(Web 経由でやや遅い) | ×(描画転送で重い) |
| 導入難度 | ◎(SSH あれば自動配備) | △(インストール・常駐・HTTPS 設計) | ×(GUI 環境+VNC/RDP 構築) |
| AI 拡張互換 | ◎(Copilot/Claude/Continue ほぼ同等) | ○(概ね可。認証フローに工夫) | ◎(デスクトップ VS Code そのもの) |
| サーバー要件 | glibc ≥ 2.28 推奨、PAM/シェル出力が静か | Node.js/バイナリ配備、HTTPS/リバプロ必須 | デスクトップ環境/VS Code 本体 |
| ネットワーク | SSH(22)で十分 | HTTPS(443)+ 逆プロキシ/トンネル推奨 | SSH X 転送 or VNC/RDP(要トンネル) |
| セキュリティ | SSH 標準(堅牢) | 設計次第(HTTPS/認証/閉域化が鍵) | SSH 経由なら可、VNC/RDP 直は危険 |
| 運用・更新 | 自動(VS Code 更新に追随) | 手動(code-server の更新) | 手動(GUI/VS Code/OS 更新) |
推奨フロー(何を選ぶべき?)
-
まず Remote-SSH を試す
- これで快適に動けば 最適解。
-
Remote-SSH がglibc/ログインスクリプト/NFS等で安定しない →
- 権限と時間があれば環境を是正(後述の対策集)。
- すぐに開発を再開したいなら、VS Code Serverを暫定運用。
-
SSH NG / クライアントに VS Code が入れられない →
- VS Code Server(ブラウザ接続)。HTTPS/認証/閉域が前提。
-
どうしても両方難しい(既存 VNC 運用・Windows サーバー制約等) →
- GUI 転送で凌ぐ(最終手段。性能は妥協)。
実践レシピ
A. Remote-SSH を正しく動かす要点(“失敗しない型”)
基本セット
- 手元 VS Code に Remote-SSH をインストール
-
~/.ssh/configを整備(ProxyJump 可、鍵認証、KeepAlive) - コマンドパレット → Remote-SSH: Connect to Host…
- 左下に 「SSH: 」 と出ていれば接続成功
サーバー側の“つまづき”と対策
-
古い glibc(例:CentOS7, 2.17)
-
そのままだと VS Code Server 同梱の Node が起動せず拡張ホストが即死
-
回避策(ユーザー空間差し替え)
-
~/.local/glibc-2.28をビルド/配置 -
~/.vscode-server/bin/<commit>/nodeを ラッパースクリプトでld-linuxから起動 - VS Code 更新で
<commit>が増えるたびに再適用。自動修復スクリプト化推奨
-
-
-
ログインスクリプトの出力干渉
-
~/.bashrc先頭に 非対話ガード を入れる# 非対話シェルでは早期 return(Remote-SSH 起動を邪魔しない) case $- in *i*) ;; *) return ;; esac -
/etc/profile.d/*.sh側は tty チェック で echo 抑止(管理者対応)
-
-
NFS ホームで重い/不安定
-
VS Code Server 置き場をローカルディスクへ
# ~/.bashrc(またはシェル設定)に追加 export VSCODE_AGENT_FOLDER=/var/tmp/$USER/.vscode-server mkdir -p "$VSCODE_AGENT_FOLDER" -
inotify 緩和(root 権限)
fs.inotify.max_user_watches=524288 fs.inotify.max_user_instances=1024 fs.inotify.max_queued_events=16384
-
-
古い wget/証明書で拡張署名検証失敗
-
署名検証を一時的に無効化(恒久対策は CA 更新)
// ~/.vscode-server/data/Machine/settings.json { "extensions.verifySignature": false }
-
AI 拡張の入れ方(Remote-SSH タブで)
- 拡張ビュー上部の 「SSH: 」タブ を選び、
Install in SSH: をクリック - Copilot: GitHub 認証ダイアログに従う
- Claude Code: 設定で API キー入力(Secret Storage 推奨)
- Continue(OpenAI 等):
~/.continue/config.jsonなどでキー設定、chmod 600
トラブル復旧の基本
- Remote-SSH: Kill VS Code Server on Host… → 再接続
-
~/.vscode-server/data/logs/*/remoteagent.logを確認 - VS Code を最新化 → だめなら 1 つ戻す
B. VS Code Server(code-server 等)で運用する
最低限のセキュア設計
- HTTPS 前提(自己署名でもよいが、社内 CA/Let’s Encrypt 推奨)
- 逆プロキシ(Nginx/Caddy 等)で Basic 認証+IP 制限
- 公開するなら サブドメイン を割り当て、HTTP → HTTPS リダイレクト強制
- 可能なら 社内 VPN 内のみ で運用
ざっくり手順(例:code-server)
# インストール
curl -fsSL https://code-server.dev/install.sh | sh # 公式スクリプト
# or npm/yarn/podman など任意
# 初回起動(ローカル確認)
code-server --auth password --port 8080
# systemd 化(例)
sudo tee /etc/systemd/system/code-server@$USER.service >/dev/null <<'UNIT'
[Unit]
Description=code-server
After=network.target
[Service]
Type=simple
User=%i
Environment=PASSWORD=<強固なパスワード>
ExecStart=/usr/bin/code-server --bind-addr 127.0.0.1:8080
Restart=always
[Install]
WantedBy=multi-user.target
UNIT
sudo systemctl enable --now code-server@$USER
Nginx(例)で HTTPS/TLS 終端 & 認証
server {
listen 443 ssl http2;
server_name code.example.org;
ssl_certificate /etc/letsencrypt/live/code.example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/code.example.org/privkey.pem;
# Basic 認証(必要に応じて)
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
}
}
拡張インストール
-
Web UI から拡張を追加、または CLI:
code-server --install-extension github.copilot code-server --install-extension anthropic.claude-code code-server --install-extension <その他> -
Copilot 初回認証はデバイスコード式となりやすい(表示に従って GitHub で承認)
-
API キー類は Secret Storage や 環境変数 に保存(絶対に Git 管理しない)
運用の要点
- 定期アップデート(code-server 本体/拡張/逆プロキシ/TLS)
- ログモニタリング(認証失敗/Rate/5xx)
- バックアップ:ユーザー設定・拡張・ワークスペース(必要に応じ)
C. GUI 転送(X11/VNC/RDP)で動かす
最小構成
-
サーバー側:デスクトップ環境+ VS Code 本体(
apt install code等) -
クライアント:X サーバー(Windows: VcXsrv/Xming、macOS: XQuartz)
-
SSH X11 転送:
# クライアント ssh -X user@remote code --disable-gpu # 必要に応じ(描画不具合回避) -
or VNC/RDP:必ず SSH トンネル or VPN を用いる
注意
- とにかく重い(遅延に弱い)。タイピング遅延/描画乱れに覚悟
- クリップボード/IME/日本語入力に癖が出ることがある
- どうしても必要な場合に限定(既存 VNC 運用の延長など)
典型トラブルと対処(方式別)
Remote-SSH
-
Failed to parse remote port…/listeningOn====など-
.bashrc//etc/profile.d/*.shの 非対話ガード で「標準出力の余計な文言」を消す
-
-
拡張ホストが秒死(code 127)
- glibc 不足:ユーザー空間 glibc(2.28+)+ Node ラッパー
-
NFS 不安定:
VSCODE_AGENT_FOLDERをローカルへ / inotify 緩和
-
拡張の署名検証失敗
- 一時的に
extensions.verifySignature=false(恒久は CA 更新)
- 一時的に
VS Code Server
-
平文 HTTP のまま
- 即時 HTTPS/TLS 化、内部でもなるべく 127.0.0.1 バインド+リバプロ
-
拡張がマーケットプレイスで見つからない/互換表記
- CLI インストール or VSIX、リリースノート/互換表記を確認
-
認証が煩雑
- デバイスコード式に慣れる。組織 SSO/Enterprise プランの検討
GUI 転送
-
表示が乱れる/重い
-
--disable-gpu/ 転送圧縮 / LAN 内利用 / そもそも方式変更を検討
-
-
セキュリティ不安
- VNC/RDP 直公開は避ける。必ず SSH トンネル or VPN。
セキュリティとコンプライアンスの要点
-
鍵認証/Ed25519、PasswordAuthentication no 推奨(サーバー管理者に依頼)
-
ForwardAgent は原則 OFF(必要時だけ)
-
API キーの保管順位:
- VS Code Secret Storage > 2) 環境変数(
~/.bashrc)> 3) 設定ファイル(権限 600)
- VS Code Secret Storage > 2) 環境変数(
-
機密コードの外部送信ポリシー:Copilot Business/Claude Enterprise 等の学習不使用プランを採用
-
ログ/監査:アクセスログ、拡張の外向き通信可否のレビュー
判断フローチャート(テキスト版)
[開始]
└─ SSH接続は可能? ── No ─→ [VS Code Server 構築(HTTPS/閉域)]
│Yes
└─ Remote-SSH で UI が軽快に動く? ── Yes ─→ [採用:Remote-SSH]
│No
└─ glibc/シェル/NFS を是正できる? ── Yes ─→ [是正して Remote-SSH 継続]
│No
└─ [一旦 VS Code Server に切替]
│
└─ それも困難 → [最終:GUI 転送]
運用チェックリスト
-
Remote-SSH 基本
-
~/.ssh/config最適化(ProxyJump/KeepAlive/鍵) -
.bashrc非対話ガード -
VSCODE_AGENT_FOLDERを NFS 外に - inotify 緩和(root)
- 拡張は 「Install in SSH: host」 でリモート側に入れる
-
-
VS Code Server
- 127.0.0.1 バインド + リバプロ or 閉域
- HTTPS/TLS、Basic 認証/SSO
- code-server/拡張/証明書の定期更新
- ログ/監視
-
AI 拡張共通
- API キーは Secret Storage or ENV(権限 600)
- 組織ポリシーに合致(学習不使用/監査ログ)
付録:CentOS 7(glibc 2.17)で Remote-SSH を通す最短メモ
注意:権限・ポリシーに従い慎重に。可能なら OS 更改が本筋。
-
ユーザー空間 glibc 2.28 を配置(
~/.local/glibc-2.28) -
~/.vscode-server/bin/<commit>/nodeを ラップ(ld-linuxでnode.rawを起動) -
VS Code 更新のたび
<commit>が変わるので 修復スクリプトを用意 -
.bashrc先頭に 非対話ガード を入れる -
VSCODE_AGENT_FOLDER=/var/tmp/$USER/.vscode-server(NFS を避ける) - (必要に応じ)
extensions.verifySignature=falseを一時設定
よくある質問(FAQ)
Q1. どれを選ぶべき?
A. まず Remote-SSH。安定・高速・楽。ダメなら VS Code Server、最後に GUI 転送。
Q2. Copilot/Claude はどこに入れる?
A. Remote-SSH タブで「Install in SSH: host」を選び、リモート側にインストール。Server 方式なら Web 画面 or CLI。GUI 転送ならリモート VS Code に直で入れる。
Q3. Remote-SSH が急に切れる / 重い
A. VSCODE_AGENT_FOLDER をローカルディスクへ / inotify 緩和 / .bashrc の非対話ガード確認。NFS を避ける。
Q4. code-server は安全?
A. 設計次第。HTTPS・認証・閉域・最小公開が守れれば実用に堪える。運用監視は必須。
Q5. 画像添付やクリップボードが不安定
A. ブラウザ実装差や X 転送の仕様で揺らぐ。**Remote-SSH(Desktop UI)**が一番安定。
まとめ
- 原則:Remote-SSH が最適(軽快・高互換・安全)。
- 例外:環境の制約(glibc/PAM/ネットワーク/クライアント事情)で厳しいなら VS Code Server。
- 最後:どうしても難しい時に GUI 転送。
- 現場指針:まず Remote-SSH を目標に据え、暫定は Server 方式で業務継続、余裕ができたら根本是正して回帰。
この順で考えれば、SSH 先での AI コーディング支援を安定・安全・高速に回せます。Happy coding!