遠端開發提示與技巧
本文涵蓋各個 Visual Studio Code 遠端開發擴充功能的疑難排解提示與技巧。請參閱 SSH、容器 (Containers) 與 WSL 文章,以取得設定和操作各個特定擴充功能的詳細資料。或者,您可以嘗試入門教學課程,協助您在遠端環境中快速上手。
如需有關 GitHub Codespaces 的提示與問題,請參閱 GitHub Codespaces 文件。
SSH 提示
SSH 功能強大且具彈性,但也增加了一些設定複雜度。本節包含一些提示與技巧,可協助您在不同環境中順利安裝並執行 Remote - SSH 擴充功能。
自訂 AI 對話回應
自訂指示 (Custom instructions) 可讓您描述常見的指導方針或規則,以取得符合您特定編碼習慣與技術堆疊的回應。
您可以使用自訂指示,提供 Copilot 關於您所連線之遠端環境類型的更多資訊 (例如安裝了哪種語言或工具鏈)。您可以像在本機上一樣使用 copilot-instructions.md 檔案。在使用開發容器 (dev container) 時,您也可以採取額外的指示設定步驟。
設定 $EDITOR 變數
對於 macOS / Linux 遠端主機,請將此程式碼片段新增至您的 shell 設定檔中 (例如 .bashrc 或 .zshrc)
if [ "$VSCODE_INJECTION" = "1" ]; then
export EDITOR="code --wait" # or 'code-insiders' if you're using VS Code Insiders
fi
對於 Windows 主機,以下是相對應的 PowerShell
if ($env:VSCODE_INJECTION -eq "1") {
$env:EDITOR = "code --wait" # or 'code-insiders' for VS Code Insiders
}
現在,執行使用 $EDITOR 變數的終端機命令 (例如 git commit) 時,將會在 VS Code 中開啟檔案,而不是預設的基於終端機的編輯器 (例如 vim 或 nano)。
設定金鑰型驗證
SSH 公開金鑰驗證是一種便利且高安全性的驗證方法,它結合了本機「私密」金鑰與您在 SSH 主機上與使用者帳戶關聯的「公開」金鑰。本節將逐步引導您如何產生這些金鑰並將其新增至主機。
提示:適用於 Windows 的 PuTTY 不是支援的用戶端,但您可以轉換您的 PuTTYGen 金鑰。
快速入門:使用 SSH 金鑰
若要為您的遠端主機設定以 SSH 金鑰為基礎的驗證。首先,我們將建立金鑰組,然後將公開金鑰複製到主機。
建立您的本機 SSH 金鑰組
檢查您的本機是否已有 SSH 金鑰。這通常位於 macOS / Linux 上的 ~/.ssh/id_ed25519.pub,以及 Windows 上使用者設定檔資料夾中的 .ssh 目錄 (例如 C:\Users\your-user\.ssh\id_ed25519.pub)。
如果您沒有金鑰,請在本機終端機 / PowerShell 中執行下列命令以產生 SSH 金鑰組
ssh-keygen -t ed25519 -b 4096
提示:沒有
ssh-keygen?請安裝支援的 SSH 用戶端。
限制私密金鑰檔案的權限
-
對於 macOS / Linux,請執行下列 shell 命令,必要時請替換您的私密金鑰路徑
chmod 400 ~/.ssh/id_ed25519 -
對於 Windows,請在 PowerShell 中執行下列命令,以授與您的使用者名稱明確的讀取權限
icacls "privateKeyPath" /grant <username>:R然後在 Windows 檔案總管中瀏覽至私密金鑰檔案,按一下滑鼠右鍵並選取內容。選取安全性標籤 > 進階 > 停用繼承 > 移除此物件的所有繼承權限。
授權您的 macOS 或 Linux 電腦進行連線
在本機終端機視窗中執行下列其中一個命令,並視需要替換使用者與主機名稱,以將您的本機公開金鑰複製到 SSH 主機。
-
連線至 macOS 或 Linux SSH 主機
export USER_AT_HOST="your-user-name-on-host@hostname" export PUBKEYPATH="$HOME/.ssh/id_ed25519.pub" ssh-copy-id -i "$PUBKEYPATH" "$USER_AT_HOST" -
連線至 Windows SSH 主機
-
主機使用 OpenSSH 伺服器,且使用者屬於管理員群組
export USER_AT_HOST="your-user-name-on-host@hostname" export PUBKEYPATH="$HOME/.ssh/id_ed25519.pub" ssh $USER_AT_HOST "powershell Add-Content -Force -Path \"\$Env:PROGRAMDATA\\ssh\\administrators_authorized_keys\" -Value '$(tr -d '\n\r' < "$PUBKEYPATH")'" -
否則
export USER_AT_HOST="your-user-name-on-host@hostname" export PUBKEYPATH="$HOME/.ssh/id_ed25519.pub" ssh $USER_AT_HOST "powershell New-Item -Force -ItemType Directory -Path \"\$HOME\\.ssh\"; Add-Content -Force -Path \"\$HOME\\.ssh\\authorized_keys\" -Value '$(tr -d '\n\r' < "$PUBKEYPATH")'"您可能會想要驗證 SSH 主機上遠端使用者的
.ssh資料夾中的authorized_keys檔案是否為您所有,且沒有其他使用者擁有存取它的權限。如需詳細資料,請參閱 OpenSSH wiki。
-
授權您的 Windows 電腦進行連線
在本機 PowerShell 視窗中執行下列其中一個命令,並視需要替換使用者與主機名稱,以將您的本機公開金鑰複製到 SSH 主機。
-
連線至 macOS 或 Linux SSH 主機
$USER_AT_HOST="your-user-name-on-host@hostname" $PUBKEYPATH="$HOME\.ssh\id_ed25519.pub" $pubKey=(Get-Content "$PUBKEYPATH" | Out-String); ssh "$USER_AT_HOST" "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '${pubKey}' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" -
連線至 Windows SSH 主機
-
主機使用 OpenSSH 伺服器,且使用者屬於管理員群組
$USER_AT_HOST="your-user-name-on-host@hostname" $PUBKEYPATH="$HOME\.ssh\id_ed25519.pub" Get-Content "$PUBKEYPATH" | Out-String | ssh $USER_AT_HOST "powershell `"Add-Content -Force -Path `"`$Env:PROGRAMDATA\ssh\administrators_authorized_keys`" `"" -
否則
$USER_AT_HOST="your-user-name-on-host@hostname" $PUBKEYPATH="$HOME\.ssh\id_ed25519.pub" Get-Content "$PUBKEYPATH" | Out-String | ssh $USER_AT_HOST "powershell `"New-Item -Force -ItemType Directory -Path `"`$HOME\.ssh`"; Add-Content -Force -Path `"`$HOME\.ssh\authorized_keys`" `""驗證 SSH 主機上遠端使用者的
.ssh資料夾中的authorized_keys檔案是否為您所有,且沒有其他使用者擁有存取它的權限。如需詳細資料,請參閱 OpenSSH wiki。
-
使用專用金鑰來提升安全性
雖然在所有 SSH 主機共用單一 SSH 金鑰可能很方便,但如果有人取得您的私密金鑰,他們也可以存取您所有的主機。您可以透過為您的開發主機建立獨立的 SSH 金鑰來防止這種情況。只要遵循以下步驟
-
在不同的檔案中產生獨立的 SSH 金鑰。
macOS / Linux:在本機終端機中執行下列命令
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519-remote-sshWindows:在本機 PowerShell 中執行下列命令
ssh-keygen -t ed25519 -f "$HOME\.ssh\id_ed25519-remote-ssh" -
遵循快速入門中的相同步驟在 SSH 主機上授權金鑰,但將
PUBKEYPATH設定為id_ed25519-remote-ssh.pub檔案。 -
在 VS Code 的命令選擇區 (F1) 中執行 Remote-SSH: Open Configuration File...,選取 SSH 設定檔,然後如下所示新增 (或修改) 主機項目
Host name-of-ssh-host-here User your-user-name-on-host HostName host-fqdn-or-ip-goes-here IdentityFile ~/.ssh/id_ed25519-remote-ssh提示:您也可以在 Windows 路徑中使用
/。如果您使用\,則需要使用兩個斜線。例如C:\\path\\to\\my\\id_ed25519。
重複使用在 PuTTYGen 中產生的金鑰
如果您使用 PuTTYGen 為要連線的主機設定 SSH 公開金鑰驗證,則需要轉換您的私密金鑰,以便其他 SSH 用戶端可以使用它。若要這麼做
-
本機開啟 PuTTYGen 並載入您想要轉換的私密金鑰。
-
從應用程式功能表中選取 Conversions > Export OpenSSH key。將轉換後的金鑰儲存到使用者設定檔資料夾中
.ssh目錄下的本機位置 (例如C:\Users\youruser\.ssh)。 -
驗證這個新的本機檔案是否為您所有,且沒有其他使用者擁有存取它的權限。
-
在 VS Code 的命令選擇區 (F1) 中執行 Remote-SSH: Open Configuration File...,選取您要變更的 SSH 設定檔,然後在設定檔中如下所示新增 (或修改) 主機項目以指向該檔案
Host name-of-ssh-host-here User your-user-name-on-host HostName host-fqdn-or-ip-goes-here IdentityFile ~/.ssh/exported-keyfile-from-putty
提升多使用者伺服器上的安全性
Remote - SSH 擴充功能會安裝並維護「VS Code 伺服器」。伺服器會使用隨機產生的金鑰啟動,任何對伺服器的新連線都需要提供該金鑰。金鑰儲存在遠端磁碟上,僅限目前使用者讀取。有一個 HTTP 路徑 /version 無需驗證即可使用。
根據預設,伺服器會傾聽隨機 TCP 連接埠上的 localhost,然後該連接埠會轉發到您的本機。如果您要連線至 Linux 或 macOS 主機,您可以切換為使用鎖定給特定使用者的 Unix 通訊端。接著會轉發此通訊端而非連接埠。
注意:此設定會停用連線多工處理 (connection multiplexing),因此建議設定公開金鑰驗證。
若要進行設定
-
請確保您在 Windows、macOS 或 Linux 上擁有本機 OpenSSH 6.7+ SSH 用戶端,以及 OpenSSH 6.7+ Linux 或 macOS 主機 (Windows 不支援此模式)。
-
在您的本機 VS Code 使用者設定中啟用 Remote.SSH: Remote Server Listen On Socket,將 Remote - SSH 切換至通訊端模式。

-
如果您已經連線至 SSH 主機,請從命令選擇區 (F1) 選取 Remote-SSH: Kill VS Code Server on Host...,以便讓設定生效。
如果您在連線時遇到錯誤,您可能需要在 SSH 主機的 sshd 設定上啟用通訊端轉發。若要這麼做
- 在SSH 主機 (而非本機) 上使用文字編輯器 (例如 vi、nano 或 pico) 開啟
/etc/ssh/sshd_config。 - 新增設定
AllowStreamLocalForwarding yes。 - 重新啟動 SSH 伺服器。(在 Ubuntu 上,執行
sudo systemctl restart sshd.)。 - 重試。
對連線停止回應或失敗進行疑難排解
如果您遇到 VS Code 在嘗試連線時停止回應 (且可能發生逾時) 的問題,您可以嘗試採取幾種方法來解決該問題。
一般疑難排解:移除伺服器
有助於對各種 Remote-SSH 問題進行疑難排解的一個命令是 Remote-SSH: Kill VS Code Server on Host。這會移除伺服器,它可以修復您可能會看到的各種廣泛問題與錯誤訊息,例如「Could not establish connection to server_name: The VS Code Server failed to start.」(無法建立與 server_name 的連線:VS Code 伺服器啟動失敗。)
查看 VS Code 是否正在等待提示
在 VS Code 中啟用 remote.SSH.showLoginTerminal 設定並重試。如果系統提示您輸入密碼或權杖,請參閱啟用替代的 SSH 驗證方法,以取得減少提示頻率的詳細資料。
如果您仍有問題,請在 settings.json 中設定下列屬性並重試
"remote.SSH.showLoginTerminal": true,
"remote.SSH.useLocalServer": false
因應某些版本 Windows OpenSSH 伺服器的錯誤
由於 Windows OpenSSH 伺服器特定版本中的錯誤,用來判斷主機是否正在執行 Windows 的預設檢查可能無法正常運作。隨附於 Windows 1909 及更早版本的 OpenSSH 伺服器不會發生此情況。
幸運的是,您可以透過將下列內容新增至 settings.json,明確告訴 VS Code 您的 SSH 主機是否正在執行 Windows,來因應此問題
"remote.SSH.useLocalServer": false
您也可以使用下列屬性強制 VS Code 將特定主機識別為 Windows
"remote.SSH.remotePlatform": {
"host-in-ssh-config-or-fqdn": "windows"
}
修正程式已合併,因此在大於 8.1.0.0 的伺服器版本中應該會解決此問題。
在遠端主機上啟用 TCP 轉發
Remote - SSH 擴充功能會利用 SSH 通道來促進與主機的通訊。在某些情況下,您的 SSH 伺服器上可能會停用此功能。若要查看這是否為問題所在,請在輸出視窗中開啟 Remote - SSH 類別,並檢查是否有下列訊息
open failed: administratively prohibited: open failed
如果您確實看到該訊息,請遵循下列步驟來更新您的 SSH 伺服器 sshd 設定
- 在SSH 主機 (而非本機) 上使用文字編輯器 (例如 Vim、nano、Pico 或記事本) 開啟
/etc/ssh/sshd_config或C:\ProgramData\ssh\sshd_config。 - 新增設定
AllowTcpForwarding yes。 - 重新啟動 SSH 伺服器。(在 Ubuntu 上,執行
sudo systemctl restart sshd。在 Windows 上,於系統管理員 PowerShell 中執行Restart-Service sshd)。 - 重試。
在您的 SSH 設定檔中設定 ProxyCommand 參數
如果您位於 Proxy 後方且無法連線至您的 SSH 主機,您可能需要在本機 SSH 設定檔中為主機使用 ProxyCommand 參數。您可以閱讀這篇 SSH ProxyCommand 文章以取得其使用範例。
確保遠端電腦具有網際網路存取權
遠端電腦必須具備網際網路存取權,才能從 Marketplace 下載 VS Code 伺服器與擴充功能。如需連線需求的詳細資料,請參閱常見問題集。
在遠端主機上設定 HTTP_PROXY / HTTPS_PROXY
如果您的遠端主機位於 Proxy 後方,您可能需要在 SSH 主機上設定 HTTP_PROXY 或 HTTPS_PROXY 環境變數。開啟您的 ~/.bashrc 檔案並新增下列內容 (將 proxy.fqdn.or.ip:3128 替換為適當的主機名稱 / IP 與連接埠)
export HTTP_PROXY=http://proxy.fqdn.or.ip:3128
export HTTPS_PROXY=$HTTP_PROXY
# Or if an authenticated proxy
export HTTP_PROXY=http://username:password@proxy.fqdn.or.ip:3128
export HTTPS_PROXY=$HTTP_PROXY
因應以 noexec 掛載的 /tmp
某些遠端伺服器設定為不允許從 /tmp 執行指令碼。VS Code 會將其安裝指令碼寫入系統暫存目錄,並嘗試從該處執行。您可以與系統管理員合作,判斷是否可以因應此問題。
檢查在安裝期間是否啟動了不同的 shell
某些使用者因為想要使用與預設不同的 shell,而從其 SSH 主機上的 .bash_profile 或其他啟動指令碼啟動不同的 shell。這可能會破壞 VS Code 的遠端伺服器安裝指令碼,因此不建議這樣做。請改用 chsh 來變更遠端電腦上的預設 shell。
連線至每筆連線動態指派電腦的系統
每次建立 SSH 連線時,某些系統會將 SSH 連線動態路由至叢集中的其中一個節點。這對 VS Code 來說是一個問題,因為它需要建立兩個連線來開啟遠端視窗:第一個是用來安裝或啟動 VS Code 伺服器 (或尋找已經執行中的執行個體),第二個是用來建立 VS Code 用來與伺服器通訊的 SSH 連接埠通道。如果在建立第二個連線時,VS Code 被路由至不同的電腦,它將無法與 VS Code 伺服器通訊。
針對此問題的一種因應措施是使用 OpenSSH 中的 ControlMaster 選項 (僅限 macOS/Linux 用戶端),如啟用替代的 SSH 驗證方法中所述,讓 VS Code 的兩個連線透過至同一節點的單一 SSH 連線進行多工處理。
請聯絡您的系統管理員以取得設定協助
SSH 是一個非常具彈性的通訊協定,並支援許多設定。如果您在登入終端機或 Remote-SSH 輸出視窗中看到其他錯誤,這些錯誤可能是因為缺少設定所致。
請聯絡您的系統管理員,以取得關於 SSH 主機和用戶端所需設定的資訊。用於連線至 SSH 主機的特定命令列引數可以新增至 SSH 設定檔中。
若要存取您的設定檔,請在命令選擇區 (F1) 中執行 Remote-SSH: Open Configuration File...。然後,您可以與管理員合作以新增必要的設定。
啟用替代的 SSH 驗證方法
如果您正在連線至 SSH 遠端主機,且符合下列其中一種情況
- 使用雙步驟驗證連線
- 使用密碼驗證
- 當 SSH Agent 未執行或無法存取時,使用帶有密碼精鍊 (passphrase) 的 SSH 金鑰
那麼 VS Code 應該會自動提示您輸入所需的資訊。如果您沒有看到提示,請在 VS Code 中啟用 remote.SSH.showLoginTerminal 設定。每當 VS Code 執行 SSH 命令時,此設定就會顯示終端機。當終端機出現時,您就可以輸入您的驗證碼、密碼或密碼精鍊。
如果您仍有問題,您可能需要在 settings.json 中新增下列屬性並重試
"remote.SSH.showLoginTerminal": true,
"remote.SSH.useLocalServer": false
如果您使用 macOS 和 Linux,並想要減少必須輸入密碼或權杖的頻率,您可以在您的本機上啟用 ControlMaster 功能,以便 OpenSSH 透過單一連線執行多個 SSH 工作階段。
若要啟用 ControlMaster
-
將類似這樣的項目新增至您的 SSH 設定檔
Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600 -
然後執行
mkdir -p ~/.ssh/sockets以建立 sockets 資料夾。
設定 SSH Agent
如果您使用帶有密碼精鍊的金鑰來連線至 SSH 主機,您應該確保 SSH Agent 正在本機執行。VS Code 會自動將您的金鑰新增至 agent,如此一來,您就不需要在每次開啟遠端 VS Code 視窗時都輸入密碼精鍊。
若要驗證 agent 正在執行且可從 VS Code 的環境中存取,請在本機 VS Code 視窗的終端機中執行 ssh-add -l。您應該會看到 agent 中的金鑰清單 (或表示沒有金鑰的訊息)。如果 agent 未執行,請遵循這些指示來啟動它。啟動 agent 後,請務必重新啟動 VS Code。
Windows
若要在 Windows 上自動啟用 SSH Agent,請啟動本機系統管理員 PowerShell 並執行下列命令
# Make sure you're running as an Administrator
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent
現在 agent 將會在登入時自動啟動。
Linux
若要在背景中啟動 SSH Agent,請執行
eval "$(ssh-agent -s)"
若要在登入時自動啟動 SSH Agent,請將這些行新增至您的 ~/.bash_profile
if [ -z "$SSH_AUTH_SOCK" ]; then
# Check for a currently running instance of the agent
RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
if [ "$RUNNING_AGENT" = "0" ]; then
# Launch a new instance of the agent
ssh-agent -s &> .ssh/ssh-agent
fi
eval `cat .ssh/ssh-agent`
fi
macOS
在 macOS 上,agent 應該預設為執行中。
使本機 SSH Agent 在遠端可用
您本機電腦上的 SSH Agent 可讓 Remote - SSH 擴充功能連線至您所選的遠端系統,而不需要重複提示輸入密碼精鍊,但在遠端執行的 Git 等工具無法存取您在本機解鎖的私密金鑰。
您可以在遠端開啟整合式終端機並執行 ssh-add -l 來查看此情況。該命令應該會列出已解鎖的金鑰,但卻回報無法連線至驗證 agent 的錯誤。設定 ForwardAgent yes 可讓本機 SSH Agent 在遠端環境中可用,藉此解決此問題。
您可以透過編輯您的 .ssh/config 檔案 (或是 Remote.SSH.configFile 所設定的任何內容 - 請使用 Remote-SSH: Open SSH Configuration File... 命令來確認) 並新增下列內容來做到這點
Host *
ForwardAgent yes
請注意,您可能會想要更具限制性,僅針對特定命名的主機設定此選項。
修復 SSH 檔案權限錯誤
SSH 對於檔案權限可能很嚴格,如果設定不正確,您可能會看到例如 "WARNING: UNPROTECTED PRIVATE KEY FILE!" (警告:未受保護的私密金鑰檔案!) 的錯誤。有幾種方法可以更新檔案權限以修正此問題,以下章節將進行說明。
本機 SSH 檔案與資料夾權限
macOS / Linux
在您的本機上,請確保已設定下列權限
| 資料夾 / 檔案 | 權限 |
|---|---|
您使用者資料夾中的 .ssh |
chmod 700 ~/.ssh |
您使用者資料夾中的 .ssh/config |
chmod 600 ~/.ssh/config |
您使用者資料夾中的 .ssh/id_ed25519.pub |
chmod 600 ~/.ssh/id_ed25519.pub |
| 任何其他金鑰檔案 | chmod 600 /path/to/key/file |
Windows
具體預期的權限可能會根據您使用的實際 SSH 實作而有所不同。我們建議使用內建的 Windows 10 OpenSSH 用戶端。
在此情況下,請確保 SSH 主機上遠端使用者的 .ssh 資料夾中的所有檔案皆為您所有,且沒有其他使用者擁有存取它們的權限。如需詳細資料,請參閱 Windows OpenSSH wiki。
對於所有其他用戶端,請查閱您的用戶端文件以了解實作的期望。
伺服器 SSH 檔案與資料夾權限
macOS / Linux
在您要連線的遠端電腦上,請確保已設定下列權限
| 資料夾 / 檔案 | Linux / macOS 權限 |
|---|---|
伺服器上使用者資料夾中的 .ssh |
chmod 700 ~/.ssh |
伺服器上使用者資料夾中的 .ssh/authorized_keys |
chmod 600 ~/.ssh/authorized_keys |
請注意,目前僅支援 Linux 主機,這就是為什麼省略了 macOS 和 Windows 10 權限的原因。
Windows
如需為 Windows OpenSSH 伺服器設定適當檔案權限的詳細資料,請參閱 Windows OpenSSH wiki。
安裝支援的 SSH 用戶端
| 作業系統 | 指示 |
|---|---|
| Windows 10 1803+ / Server 2016/2019 1803+ | 安裝 Windows OpenSSH 用戶端。 |
| 較早的 Windows 版本 | 安裝 Git for Windows。 |
| macOS | 預先安裝。 |
| Debian/Ubuntu | 執行 sudo apt-get install openssh-client |
| RHEL / Fedora / CentOS | 執行 sudo yum install openssh-clients |
VS Code 會在 PATH 中尋找 ssh 命令。如果找不到,在 Windows 上它將會嘗試在預設的 Git for Windows 安裝路徑中尋找 ssh.exe。您也可以透過將 remote.SSH.path 屬性新增至 settings.json,明確告訴 VS Code 在哪裡可以找到 SSH 用戶端。
安裝支援的 SSH 伺服器
| 作業系統 | 指示 | 詳細資訊 |
|---|---|---|
| Debian 8+ / Ubuntu 16.04+ | 執行 sudo apt-get install openssh-server |
如需詳細資料,請參閱 Ubuntu SSH 文件。 |
| RHEL / CentOS 7+ | 執行 sudo yum install openssh-server && sudo systemctl start sshd.service && sudo systemctl enable sshd.service |
如需詳細資料,請參閱 RedHat SSH 文件。 |
| SuSE 12+ / openSUSE 42.3+ | 在 Yast 中,前往「服務管理員 (Services Manager)」,在清單中選取 "sshd",然後按一下啟用 (Enable)。接著前往「防火牆 (Firewall)」,選取永久 (Permanent) 設定,並在服務下方勾選 sshd。 | 如需詳細資料,請參閱 SuSE SSH 文件。 |
| Windows 10 1803+ / Server 2016/2019 1803+ | 安裝 Windows OpenSSH 伺服器。 | |
| macOS 10.14+ (Mojave) | 啟用遠端登入。 |
解決在 SSH 主機上執行 Git 推送或同步時停止回應的問題
如果您使用 SSH 複製 Git 儲存庫,且您的 SSH 金鑰具有密碼精鍊,則 VS Code 的提取與同步功能在遠端執行時可能會停止回應。
您可以使用沒有密碼精鍊的 SSH 金鑰、使用 HTTPS 複製,或從命令列執行 git push 來因應此問題。
使用 SSHFS 存取遠端主機上的檔案
SSHFS 是一種安全的遠端檔案系統存取通訊協定,建構於 SFTP 之上。相較於 CIFS / Samba 共用等,它具備一項優勢:只需要對該機器進行 SSH 存取即可。
注意:基於效能考量,SSHFS 最適合用於單一檔案編輯以及上傳/下載內容。如果您需要使用會同時大量讀取/寫入許多檔案的應用程式 (例如本機原始檔控制工具),rsync 會是更好的選擇。
macOS / Linux:
在 Linux 上,您可以使用發行版本的套件管理員來安裝 SSHFS。對於 Debian/Ubuntu:sudo apt-get install sshfs
注意:WSL 1 不支援 FUSE 或 SSHFS,因此目前的 Windows 指令有所不同。WSL 2 確實包含 FUSE 與 SSHFS 支援,因此這情況很快就會改變。
在 macOS 上,您可以使用 Homebrew 安裝 SSHFS
brew install --cask macfuse
brew install gromgit/fuse/sshfs-mac
brew link --overwrite sshfs-mac
此外,如果您不想使用命令列來掛載遠端檔案系統,也可以安裝 SSHFS GUI。
若要使用命令列,請從本機終端機執行下列命令 (將 user@hostname 替換為遠端使用者與主機名稱 / IP)
export USER_AT_HOST=user@hostname
# Make the directory where the remote filesystem will be mounted
mkdir -p "$HOME/sshfs/$USER_AT_HOST"
# Mount the remote filesystem
sshfs "$USER_AT_HOST:" "$HOME/sshfs/$USER_AT_HOST" -ovolname="$USER_AT_HOST" -p 22 \
-o workaround=nonodelay -o transform_symlinks -o idmap=user -C
這會讓遠端機器上的家目錄在 ~/sshfs 下可用。當您完成後,您可以使用作業系統的 Finder / 檔案總管或透過命令列將其解除掛載
umount "$HOME/sshfs/$USER_AT_HOST"
Windows
遵循以下步驟
-
在 Linux 上,將
.gitattributes檔案新增至您的專案中,以強制 Linux 與 Windows 之間的一致行結尾,從而避免因兩個作業系統之間的 CRLF/LF 差異而導致的未預期問題。如需詳細資料,請參閱解決 Git 行結尾問題。 -
接下來,使用 Chocolatey 安裝 SSHFS-Win:
choco install sshfs -
安裝適用於 Windows 的 SSHFS 後,您可以使用檔案總管的對應網路磁碟機... 選項,並輸入路徑
\\sshfs\user@hostname(其中user@hostname是您的遠端使用者與主機名稱 / IP)。您可以使用命令提示字元編寫指令碼來執行此操作:net use /PERSISTENT:NO X: \\sshfs\user@hostname -
完成後,請在檔案總管中對該磁碟機按一下滑鼠右鍵並選取中斷連線來中斷連線。
從終端機連線至遠端主機
設定主機之後,您可以透過傳遞遠端 URI 直接從終端機連線至該主機。
例如,若要連線至 remote_server 並開啟 /code/my_project 資料夾,請執行
code --remote ssh-remote+remote_server /code/my_project
我們需要猜測輸入的路徑是檔案還是資料夾。如果它具有副檔名,則會被視為檔案。
若要強制開啟資料夾,請在路徑中新增斜線或使用
code --folder-uri vscode-remote://ssh-remote+remote_server/code/folder.with.dot
若要強制開啟檔案,請新增 --goto 或使用
code --file-uri vscode-remote://ssh-remote+remote_server/code/fileWithoutExtension
使用 rsync 維持原始程式碼的本機複本
使用 SSHFS 存取遠端檔案的替代方案是使用 rsync 將遠端主機上資料夾的完整內容複製到您的本機。rsync 命令會在每次執行時判斷哪些檔案需要更新,這比使用 scp 或 sftp 等工具更有效率且更方便。如果您真的需要使用多檔案或效能密集的本機工具,這主要是需要考慮的選項。
rsync 命令在 macOS 上是內建可用的,且可以使用 Linux 套件管理員來安裝 (例如在 Debian/Ubuntu 上執行 sudo apt-get install rsync)。對於 Windows,您需要使用 WSL 或 Cygwin 才能存取該命令。
若要使用該命令,請巡覽至您要儲存同步內容的資料夾,並執行下列命令,將 user@hostname 替換為遠端使用者與主機名稱 / IP,並將 /remote/source/code/path 替換為遠端原始程式碼位置。
在 macOS、Linux 或 WSL 內部
rsync -rlptzv --progress --delete --exclude=.git "user@hostname:/remote/source/code/path" .
或在 Windows 上的 PowerShell 中使用 WSL
wsl rsync -rlptzv --progress --delete --exclude=.git "user@hostname:/remote/source/code/path" "`$(wslpath -a '$PWD')"
每當您想要取得檔案的最新複本時,都可以重新執行此命令,且只會傳輸更新。刻意排除 .git 資料夾的原因是為了效能考量,以及讓您可以使用本機 Git 工具而不必擔心遠端主機上的狀態。
若要推送內容,請反轉命令中的來源與目標參數。不過,在 Windows 上,您應該先在專案中新增 .gitattributes 檔案來強制一致的行結尾,然後再執行此操作。如需詳細資料,請參閱解決 Git 行結尾問題。
rsync -rlptzv --progress --delete --exclude=.git . "user@hostname:/remote/source/code/path"
清理遠端上的 VS Code 伺服器
SSH 擴充功能提供了一個用來從遠端機器清理 VS Code 伺服器的命令:Remote-SSH: Uninstall VS Code Server from Host...。該命令會執行兩件事:終止任何執行中的 VS Code 伺服器處理序,並刪除安裝伺服器的資料夾。
如果您想要手動執行這些步驟,或者該命令對您無效,您可以執行類似這樣的指令碼
# Kill server processes
kill -9 $(ps aux | grep vscode-server | grep $USER | grep -v grep | awk '{print $2}')
# Delete related files and folder
rm -rf $HOME/.vscode-server # Or ~/.vscode-server-insiders
VS Code 伺服器先前安裝在 ~/.vscode-remote 下,因此您也可以檢查該位置。
透過 SSH 連線至遠端 WSL 2 主機
您可能會想要使用 SSH 連線至在遠端機器上執行的 WSL 發行版本。請參閱這篇指南,了解如何從外部機器透過 SSH 連線至 Windows 10 上的 Bash 與 WSL 2。
提交問題
如果您在使用 Remote-SSH 擴充功能時遇到困難並認為需要提交問題,請先確保您已閱讀本網站上的文件,然後參閱疑難排解 wiki 文件,以取得關於取得記錄檔以及嘗試更多可能有助於縮小問題來源之步驟的資訊。
Dev Containers 提示
如果您想閱讀關於使用開發容器的提示,可以前往開發容器提示與技巧。
WSL 提示
首次啟動:VS Code 伺服器先決條件
某些 WSL Linux 發行版本缺少 VS Code 伺服器啟動所需的程式庫。您可以使用其套件管理員將額外的程式庫新增至您的 Linux 發行版本中。
Debian 與 Ubuntu
開啟 Debian 或 Ubuntu WSL shell 以新增 wget 與 ca-certificates
sudo apt-get update && sudo apt-get install wget ca-certificates
Alpine
以 root 身分開啟 Alpine WSL shell (wsl -d Alpine -u root) 以新增 libstdc++
apk update && apk add libstdc++
在 Windows 10 2018 年 4 月更新 (組建 1803) 及較舊版本上,必須要有 /bin/bash
apk update && apk add bash
選取 WSL 擴充功能所使用的發行版本
WSL: New Window 將會開啟註冊為預設的 WSL 發行版本。
若要開啟非預設的發行版本,請從要使用的發行版本的 WSL shell 執行 code .,或使用 WSL: New Window using Distro。
在早於 Windows 10 2019 年 5 月更新 (版本 1903) 的 WSL 版本中,WSL 命令只能使用預設發行版本。因此,WSL 擴充功能可能會提示您是否同意變更預設發行版本。
您隨時可以使用 wslconfig.exe 來變更您的預設值。
例如
wslconfig /setdefault Ubuntu
您可以執行下列命令來查看已安裝哪些發行版本
wslconfig /l
為伺服器啟動設定環境
當 WSL 擴充功能在 WSL 中啟動 VS Code 伺服器時,它不會執行任何 shell 設定指令碼。這樣做是為了避免自訂設定指令碼阻礙啟動。
如果您需要設定啟動環境,可以使用此處所述的環境設定指令碼。
為遠端擴充功能主機設定環境
遠端擴充功能主機與終端機的環境是根據預設 shell 的設定指令碼。為了評估遠端擴充功能主機處理序的環境變數,伺服器會將預設 shell 的執行個體建立為互動式登入 shell。它會從中探測環境變數,並將其用作遠端擴充功能主機處理序的初始環境。因此,環境變數的值取決於設定為預設的 shell 以及該 shell 的設定指令碼內容。
請參閱 Unix shell 初始化以概覽每個 shell 的設定指令碼。大多數 WSL 發行版本都將 /bin/bash 設定為預設 shell。/bin/bash 會先在 /etc/profile 下尋找啟動檔案,並在 ~/.bash_profile、~/.bash_login、~/.profile 下尋找任何啟動檔案。
若要變更 WSL 發行版本的預設 shell,請遵循這篇部落格文章中的指示。
修復 code 命令無法運作的問題
如果從 Windows 上的 WSL 終端機輸入 code 無法運作,因為找不到 code,則您的 WSL PATH 中可能缺少某些關鍵位置。
請透過開啟 WSL 終端機並輸入 echo $PATH 來檢查。您應該會看到列出的 VS Code 安裝路徑。根據預設,這會是
/mnt/c/Users/Your Username/AppData/Local/Programs/Microsoft VS Code/bin
但是,如果您使用的是系統安裝程式,則安裝路徑為
/mnt/c/Program Files/Microsoft VS Code/bin
...或...
/mnt/c/Program Files (x86)/Microsoft VS Code/bin
路徑從 Windows 中的 PATH 變數繼承是 WSL 的一項功能。若要變更 Windows PATH 變數,請使用 Windows 開始功能表中的編輯您帳戶的環境變數命令。
如果您已停用路徑共用功能,請編輯您的 .bashrc,新增下列內容,然後啟動新的終端機
WINDOWS_USERNAME="Your Windows Alias"
export PATH="$PATH:/mnt/c/Windows/System32:/mnt/c/Users/${WINDOWS_USERNAME}/AppData/Local/Programs/Microsoft VS Code/bin"
# or...
# export PATH="$PATH:/mnt/c/Program Files/Microsoft VS Code/bin"
# or...
# export PATH="$PATH:/mnt/c/Program Files (x86)/Microsoft VS Code/bin"
注意:請務必在目錄名稱中的空白字元加上引號或逸出。
尋找 'code' 命令的問題
如果從 Windows 命令提示字元輸入 code 無法啟動 VS Code,您可以執行 VSCODE_WSL_DEBUG_INFO=true code . 來協助我們診斷問題。
請提交問題並附上完整的輸出。
尋找啟動伺服器或連線至伺服器的問題
當 WSL 視窗無法連線至遠端伺服器時,您可以在 WSL 記錄檔中取得更多資訊。提交問題時,務必傳送 WSL 記錄檔的完整內容非常重要。
執行命令 WSL: Open Log 來開啟 WSL 記錄檔。記錄檔將會顯示在 WSL 標籤下方的終端機檢視中。

若要取得更詳細的記錄,請在使用者設定中啟用 remote.WSL.debug 設定。
伺服器啟動失敗並發生區段違規
您可以傳送核心傾印檔案給我們,以協助我們調查此問題。若要取得核心傾印檔案,請遵循下列步驟
在 Windows 命令提示字元中
- 執行
code --locate-extension ms-vscode-remote.remote-wsl以判斷 WSL 擴充功能資料夾。 cd到傳回的路徑。- 使用 VS Code 開啟
wslServer.sh指令碼:code .\scripts\wslServer.sh。 - 在最後一行之前 (在
"$VSCODE_REMOTE_BIN/$COMMIT/bin/$SERVER_APPNAME" "$@"之前),新增ulimit -C unlimited。 - 啟動執行遠端伺服器的 WSL 視窗,並等候區段違規發生。
核心檔案將會位於上方所述的 WSL 擴充功能資料夾中。
我在嘗試重新命名開啟的工作區中的資料夾時看到 EACCES: permission denied 錯誤
這是 WSL 檔案系統實作中的已知問題 (Microsoft/WSL#3395, Microsoft/WSL#1956),由 VS Code 啟動的檔案監視器所引起。此問題只會在 WSL 2 中修正。
若要避免此問題,請將 remote.WSL.fileWatcher.polling 設定為 true。不過,以輪詢為基礎的方法對於大型工作區會有效能影響。
對於大型工作區,您可能會想要增加輪詢間隔 remote.WSL.fileWatcher.pollingInterval,並使用 files.watcherExclude 來控制要監視的資料夾。
WSL 2 沒有該檔案監視器問題,且不受新設定影響。
解決 WSL 中的 Git 行結尾問題 (導致許多修改過的檔案)
由於 Windows 和 Linux 使用不同的預設行結尾,Git 可能會回報大量除了行結尾之外沒有任何差異的修改過檔案。為防止發生這種情況,您可以使用 .gitattributes 檔案或在 Windows 端全域停用行結尾轉換。
通常,在您的儲存庫中新增或修改 .gitattributes 檔案是解決此問題最可靠的方法。將此檔案認可至原始檔控制將有助於其他人,並允許您視需要根據儲存庫變更行為。例如,將下列內容新增至儲存庫根目錄中的 .gitattributes 檔案,將會強制所有項目都是 LF,但需要 CRLF 的 Windows 批次檔除外
* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
請注意這適用於 Git v2.10+,因此如果您遇到問題,請確保已安裝較新版本的 Git 用戶端。您可以將儲存庫中其他需要 CRLF 的檔案類型新增至同一個檔案中。
如果您仍偏好始終上傳 Unix 風格的行結尾 (LF),您可以使用 input 選項。
git config --global core.autocrlf input
如果您偏好完全停用行結尾轉換,請改為執行下列命令
git config --global core.autocrlf false
最後,您可能需要再次複製儲存庫才能使這些設定生效。
在 Windows 與 WSL 之間共用 Git 憑證
如果您使用 HTTPS 複製儲存庫,且已在 Windows 中設定憑證協助程式,您可以將其與 WSL 共用,以便您輸入的密碼在兩端都能持續保留。(請注意,這不適用於使用 SSH 金鑰。)
只要遵循下列步驟
-
在Windows 命令提示字元或 PowerShell 中執行下列命令,以在 Windows 上設定憑證管理員
git config --global credential.helper wincred -
在WSL 終端機中執行下列命令,以設定 WSL 使用相同的憑證協助程式
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"
現在,當您在 Windows 端使用 Git 時所輸入的任何密碼,都將可用於 WSL,反之亦然。
解決從 WSL 執行 Git 推送或同步時停止回應的問題
如果您使用 SSH 複製 Git 儲存庫,且您的 SSH 金鑰具有密碼精鍊,則 VS Code 的提取與同步功能在遠端執行時可能會停止回應。
您可以使用沒有密碼精鍊的 SSH 金鑰、使用 HTTPS 複製,或從命令列執行 git push 來因應此問題。
GitHub Codespaces 提示
如需有關 GitHub Codespaces 的提示與問題,請參閱 GitHub Codespaces 文件。您也可以查看可能會影響您 Codespaces 的已知網頁限制與調整。
擴充功能提示
雖然許多擴充功能在未經修改的情況下即可運作,但仍有一些問題可能會阻止某些功能如期運作。在某些情況下,您可以使用另一個命令來因應此問題,而在其他情況下,則可能需要修改擴充功能。本節提供常見問題的快速參考以及解決這些問題的提示。您也可以參閱有關支援遠端開發的主要擴充功能文章,以取得修改擴充功能以支援遠端擴充功能主機的深入指南。
解決關於缺少相依性的錯誤
某些擴充功能依賴於某些 WSL Linux 發行版本基本安裝中找不到的程式庫。您可以使用其套件管理員將額外的程式庫新增至您的 Linux 發行版本中。對於 Ubuntu 與 Debian 架構的發行版本,請執行 sudo apt-get install <package> 來安裝所需的程式庫。請檢查您的擴充功能文件或錯誤訊息中提到的執行階段,以取得額外的安裝詳細資料。
本機絕對路徑設定在遠端套用時失敗
當您連線至遠端端點時,會重複使用 VS Code 的本機使用者設定。雖然這可保持您的使用者體驗一致,但由於目標位置不同,您可能需要在本機與每個主機 / 容器 / WSL 之間變更絕對路徑設定。
解決方式:在您連線至遠端端點後,您可以透過從命令選擇區 (F1) 執行 Preferences: Open Remote Settings 命令,或在設定編輯器中選取遠端標籤,來設定端點特定的設定。每當您連線時,這些設定都會覆寫您現有的任何本機設定。
需要在遠端端點上安裝本機 VSIX
有時候您會想要在遠端機器上安裝本機 VSIX,無論是在開發期間還是當擴充功能作者請您試用修正程式時。
解決方式:一旦您連線至 SSH 主機、容器或 WSL,您就可以用與本機相同的方式安裝 VSIX。從命令選擇區 (F1) 執行 Extensions: Install from VSIX... 命令。您可能也會想要將 "extensions.autoUpdate": false 新增至 settings.json,以防止自動更新至最新的 Marketplace 版本。如需在遠端環境中開發與測試擴充功能的詳細資訊,請參閱支援遠端開發。
瀏覽器未在本機開啟
某些擴充功能會使用外部 node 模組或自訂程式碼來啟動瀏覽器視窗。不幸的是,這可能會導致擴充功能在遠端而非本機啟動瀏覽器。
解決方式:擴充功能可以使用 vscode.env.openExternal API 來解決此問題。如需詳細資料,請參閱擴充功能作者指南。
剪貼簿無法運作
某些擴充功能會使用像是 clipboardy 的 node 模組來與剪貼簿整合。不幸的是,這可能會導致擴充功能不正確地與遠端側的剪貼簿進行整合。
解決方式:擴充功能可以切換至 VS Code 剪貼簿 API 來解決此問題。如需詳細資料,請參閱擴充功能作者指南。
無法從瀏覽器或應用程式存取本機網路伺服器
在容器、SSH 主機內或透過 GitHub Codespaces 工作時,瀏覽器正在連線的連接埠可能會遭到封鎖。
解決方式:擴充功能可以使用 vscode.env.openExternal 或 vscode.env.asExternalUri API (會自動轉發 localhost 連接埠) 來解決此問題。如需詳細資料,請參閱擴充功能作者指南。作為因應措施,您可以使用 Forward a Port 命令來手動執行此操作。
Webview 內容未顯示
如果擴充功能的 webview 內容使用 iframe 來連線至本機網路伺服器,則 webview 正在連線的連接埠可能會遭到封鎖。此外,如果擴充功能將 vscode-resource:// URI 硬式編碼,而不是使用 asWebviewUri,則內容可能不會顯示在 Codespaces 瀏覽器編輯器中。
解決方式:擴充功能可以使用 webview.asWebviewUri 來解決 vscode-resource:// URI 的問題。
如果連接埠遭到封鎖,最好的方法是改為使用 webview 訊息傳遞 API。作為因應措施,可以使用 vscode.env.asExternalUri 允許 webview 連線至從 VS Code 啟動的 localhost 網路伺服器。不過,這目前僅針對 Codespaces 瀏覽器型編輯器遭到 MicrosoftDocs/vscodespaces#11 封鎖。如需因應措施的詳細資料,請參閱擴充功能作者指南。
遭到封鎖的 localhost 連接埠
如果您嘗試從外部應用程式連線至 localhost 連接埠,該連接埠可能會遭到封鎖。
解決方式:VS Code 1.40 推出了全新的 vscode.env.asExternalUri API,供擴充功能以程式設計方式轉發任意連接埠。如需詳細資料,請參閱擴充功能作者指南。作為因應措施,您可以使用 Forward a Port 命令來手動執行此操作。
儲存擴充功能資料時發生錯誤
擴充功能可能會透過在 Linux 上尋找 ~/.config/Code 資料夾來嘗試持續保存全域資料。此資料夾可能不存在,這可能會導致擴充功能擲回例如 ENOENT: no such file or directory, open '/root/.config/Code/User/filename-goes-here 的錯誤。
解決方式:擴充功能可以使用 context.globalStorageUri 或 context.storageUri 屬性來解決此問題。如需詳細資料,請參閱擴充功能作者指南。
無法登入 / 每次連線至新端點時都必須登入
需要登入的擴充功能可能會使用自己的程式碼來持續保存祕密。此程式碼可能會因缺少相依性而失敗。即使成功,祕密也會儲存在遠端,這意味著您必須為每個新端點登入。
解決方式:擴充功能可以使用 SecretStorage API 來解決此問題。如需詳細資料,請參閱擴充功能作者指南。
不相容的擴充功能導致 VS Code 無法連線
如果在遠端主機、容器或 WSL 中安裝了不相容的擴充功能,我們曾看過由於不相容而導致 VS Code 伺服器停止回應或當機的實例。如果擴充功能立即啟動,這可能會阻止您連線並能夠解除安裝該擴充功能。
解決方式:遵循下列步驟手動刪除遠端擴充功能資料夾
-
對於容器,請確保您的
devcontainer.json不再包含對有問題之擴充功能的參考。 -
接下來,使用獨立的終端機 / 命令提示字元連線至遠端主機、容器或 WSL。
- 如果是 SSH 或 WSL,請相應地連線至環境 (執行
ssh以連線至伺服器或開啟 WSL 終端機)。 - 如果使用容器,請透過呼叫
docker ps -a並在清單中尋找具有正確名稱的映像檔來識別容器 ID。如果容器已停止,請執行docker run -it <id> /bin/sh。如果正在執行,請執行docker exec -it <id> /bin/sh。
- 如果是 SSH 或 WSL,請相應地連線至環境 (執行
-
連線後,針對 VS Code 穩定版執行
rm -rf ~/.vscode-server/extensions及/或針對 VS Code Insiders 執行rm -rf ~/.vscode-server-insiders/extensions來移除所有擴充功能。
隨附或取得預先建置原生模組的擴充功能失敗
與 VS Code 擴充功能綑綁 (或為其動態取得) 的原生模組必須使用 Electron 的 electron-rebuild 進行重新編譯。不過,VS Code 伺服器執行的是標準 (非 Electron) 版本的 Node.js,這可能會導致二進位檔在遠端使用時失敗。
解決方式:需要修改擴充功能來解決此問題。它們需要針對 VS Code 隨附的 Node.js 中的「modules」版本,包含 (或動態取得) 兩組二進位檔 (Electron 與標準 Node.js),然後在其啟用函式中檢查 context.executionContext === vscode.ExtensionExecutionContext.Remote 以設定正確的二進位檔。如需詳細資料,請參閱擴充功能作者指南。
擴充功能僅在非 x86_64 主機或 Alpine Linux 上失敗
如果擴充功能在 Debian 9+、Ubuntu 16.04+ 或 RHEL / CentOS 7+ 遠端 SSH 主機、容器或 WSL 上運作正常,但在受支援的非 x86_64 主機 (例如 ARMv7l) 或 Alpine Linux 容器上失敗,則該擴充功能可能僅包含不支援這些平台的原生程式碼或執行階段。例如,擴充功能可能僅包含原生模組或執行階段的 x86_64 編譯版本。對於 Alpine Linux 而言,由於 Alpine Linux 中的 libc 實作方式 (musl) 與其他發行版本 (glibc) 之間存在根本差異,所包含的原生程式碼或執行階段可能無法運作。
解決方式:擴充功能將需要透過針對這些額外目標編譯 / 包含二進位檔來選擇支援這些平台。值得注意的是,某些第三方 npm 模組也可能包含會導致此問題的原生程式碼。因此,在某些情況下,您可能需要與 npm 模組作者合作以新增額外的編譯目標。如需詳細資料,請參閱擴充功能作者指南。
擴充功能因缺少模組而失敗
依賴 Electron 或 VS Code 基礎模組 (未由擴充功能 API 公開) 且未提供備用方案的擴充功能在遠端執行時可能會失敗。您可能會在開發人員工具主控台中看到例如找不到 original-fs 的錯誤。
解決方式:移除對 Electron 模組的相依性或提供備用方案。如需詳細資料,請參閱擴充功能作者指南。
無法存取 / 傳輸遠端工作區檔案至本機機器
在外部應用程式中開啟工作區檔案的擴充功能可能會遇到錯誤,因為外部應用程式無法直接存取遠端檔案。
解決方式:如果您建立旨在於本機執行的「UI」擴充功能,您可以使用 vscode.workspace.fs API 來與遠端工作區檔案系統互動。然後,您可以將其設為「Workspace」擴充功能的相依性,並在需要時使用命令叫用它。如需不同類型擴充功能以及如何使用命令在它們之間進行通訊的詳細資料,請參閱擴充功能作者指南。
無法從擴充功能存取連接的裝置
存取本機連接裝置的擴充功能在遠端執行時將無法連線至它們。
解決方式:目前沒有。我們正在調查解決此問題的最佳方法。
問題與回饋
回報問題
如果您遇到其中一個遠端開發擴充功能的問題,收集正確的記錄檔非常重要,這樣我們才能協助您診斷您的問題。
每個遠端擴充功能都有一個用來檢視其記錄檔的命令。
您可以從命令選擇區 (F1) 使用 Remote-SSH: Show Log 取得 Remote - SSH 擴充功能記錄檔。回報 Remote - SSH 問題時,也請驗證您是否能從外部終端機 (不使用 Remote - SSH) 透過 SSH 連線至您的機器。
同樣地,您可以透過 Dev Containers: Show Container Log 取得開發容器擴充功能記錄檔。
就像上述兩者一樣,您可以透過 WSL: Show Log 取得 WSL 擴充功能記錄檔。同時也請檢查您的問題是否正在 WSL 存放庫中在上游被追蹤 (且並非由 WSL 擴充功能引起)。
如果您在遠端使用其他擴充功能時遇到問題 (例如,其他擴充功能在遠端內容中未正確載入或安裝),從 Remote Extension Host 輸出管道 (Output: Focus on Output View) 擷取記錄檔並從下拉式方塊中選取 Log (Remote Extension Host) 會很有幫助。
注意:如果您只看到 Log (Extension Host),這是本機擴充功能主機,且遠端擴充功能主機未啟動。這是因為記錄管道只有在建立記錄檔之後才會建立,因此如果遠端擴充功能主機未啟動,則不會建立遠端擴充功能主機記錄檔,也不會顯示在「輸出」檢視中。將此資訊納入您的問題中仍然很有幫助。
遠端問題與意見反應資源
我們有各種其他遠端資源
- 請參閱遠端開發常見問題集。
- 在 Stack Overflow 上搜尋。
- 提出功能需求或回報問題。