🚀 在 VS Code 中

遠端開發秘訣與技巧

本文涵蓋每個 Visual Studio Code 遠端開發擴充功能的疑難排解秘訣與技巧。如需設定和使用各個特定擴充功能的詳細資訊,請參閱 SSH容器WSL 文章。或嘗試入門的教學課程,以協助您在遠端環境中快速執行。

如需關於 GitHub Codespaces 的秘訣和問題,請參閱 GitHub Codespaces 文件

SSH 秘訣

SSH 功能強大且彈性,但也增加了一些設定複雜性。本節包含一些秘訣與技巧,可協助您在不同環境中啟動並執行 Remote - SSH 擴充功能。

設定 $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 中開啟檔案,而不是預設的終端機型編輯器 (例如 vimnano)。

設定金鑰型驗證

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 金鑰來防止這種情況。只需依照下列步驟執行

  1. 在不同的檔案中產生個別的 SSH 金鑰。

    macOS / Linux:在本機終端機中執行下列命令

    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519-remote-ssh
    

    Windows:在本機 PowerShell 中執行下列命令

    ssh-keygen -t ed25519 -f "$HOME\.ssh\id_ed25519-remote-ssh"
    
  2. 依照快速入門中的相同步驟,授權 SSH 主機上的金鑰,但將 PUBKEYPATH 設定為 id_ed25519-remote-ssh.pub 檔案。

  3. 在 VS Code 中,在命令面板 (F1) 中執行 Remote-SSH: 開啟組態檔...,選取 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 用戶端可以使用它。若要執行此操作

  1. 在本機開啟 PuTTYGen 並載入您要轉換的私密金鑰。

  2. 從應用程式功能表選取轉換 > 匯出 OpenSSH 金鑰。將轉換後的金鑰儲存到使用者設定檔資料夾中 .ssh 目錄下的本機位置 (例如 C:\Users\youruser\.ssh)。

  3. 驗證這個新的本機檔案是否由您擁有,且沒有其他使用者具有存取權限。

  4. 在 VS Code 中,在命令面板 (F1) 中執行 Remote-SSH: 開啟組態檔...,選取您要變更的 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 Server」。伺服器以隨機產生的金鑰啟動,且任何與伺服器的新連線都需要提供金鑰。金鑰儲存在遠端磁碟上,只有目前使用者可以讀取。有一個 HTTP 路徑在 /version 上可供使用,而無需驗證。

依預設,伺服器會接聽隨機 TCP 連接埠上的 localhost,然後轉送到您的本機電腦。如果您要連線到 Linux 或 macOS 主機,您可以切換為使用鎖定給特定使用者的 Unix Socket。然後轉送此 Socket 而不是連接埠。

注意: 此設定會停用連線多工,因此建議設定公開金鑰驗證

若要設定它

  1. 請確定您的 Windows、macOS 或 Linux 上有本機 OpenSSH 6.7+ SSH 用戶端,以及OpenSSH 6.7+ Linux 或 macOS 主機 (Windows 不支援此模式)。

  2. 透過在您的本機 VS Code 使用者設定中啟用 Remote.SSH: 遠端伺服器接聽 Socket,將 Remote - SSH 切換為 Socket 模式。

    Listen on socket VS Code setting

  3. 如果您已連線到 SSH 主機,請從命令面板 (F1) 選取 Remote-SSH: 終止主機上的 VS Code Server...,讓設定生效。

如果您在連線時遇到錯誤,您可能需要在 SSH 主機的 sshd 組態上啟用 Socket 轉送。若要執行此操作

  1. SSH 主機上 (而非本機) 的文字編輯器 (例如 vi、nano 或 pico) 中開啟 /etc/ssh/sshd_config
  2. 新增設定 AllowStreamLocalForwarding yes
  3. 重新啟動 SSH 伺服器。(在 Ubuntu 上,執行 sudo systemctl restart sshd。)。
  4. 重試。

疑難排解連線掛起或失敗的問題

如果您在嘗試連線時遇到 VS Code 掛起 (且可能逾時) 的問題,您可以執行一些動作來嘗試解決此問題。

一般疑難排解:移除伺服器

有助於疑難排解各種 Remote-SSH 問題的一個命令是 Remote-SSH: 終止主機上的 VS Code Server。這將移除伺服器,這可以修正您可能看到的多種問題和錯誤訊息,例如「無法建立與 server_name 的連線:VS Code Server 無法啟動。」

查看 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 伺服器時,不會發生這種情況。

幸運的是,您可以透過明確告知 VS Code 您的 SSH 主機是否正在執行 Windows 來解決此問題,方法是將下列項目新增至 settings.json

"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 組態

  1. SSH 主機上 (而非本機) 的文字編輯器 (例如 Vim、nano、Pico 或記事本) 中開啟 /etc/ssh/sshd_configC:\ProgramData\ssh\sshd_config
  2. 新增設定 AllowTcpForwarding yes
  3. 重新啟動 SSH 伺服器。(在 Ubuntu 上,執行 sudo systemctl restart sshd。在 Windows 上,在管理員 PowerShell 中執行 Restart-Service sshd)。
  4. 重試。

在您的 SSH 組態檔中設定 ProxyCommand 參數

如果您位於 Proxy 後方且無法連線到您的 SSH 主機,您可能需要在本機 SSH 組態檔中使用主機的 ProxyCommand 參數。您可以閱讀這篇 SSH ProxyCommand 文章,以取得其用法的範例。

確保遠端電腦具有網際網路存取權

遠端電腦必須具有網際網路存取權,才能從 Marketplace 下載 VS Code Server 和擴充功能。如需連線需求的詳細資訊,請參閱 常見問題集

在遠端主機上設定 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

有些使用者從其 SSH 主機上的 .bash_profile 或其他啟動指令碼啟動不同的 Shell,因為他們想要使用與預設 Shell 不同的 Shell。這可能會破壞 VS Code 的遠端伺服器安裝指令碼,因此不建議這樣做。請改用 chsh 來變更遠端電腦上的預設 Shell。

連線至每次連線動態指派電腦的系統

某些系統每次建立 SSH 連線時,都會將 SSH 連線動態路由至叢集中的一個節點。這對 VS Code 來說是個問題,因為它會建立兩個連線以開啟遠端視窗:第一個連線用於安裝或啟動 VS Code Server (或尋找已在執行的執行個體),第二個連線用於建立 VS Code 用於與伺服器通訊的 SSH 連接埠通道。如果 VS Code 在建立第二個連線時路由至不同的電腦,它將無法與 VS Code Server 通訊。

此問題的一個解決方案是在 OpenSSH 中使用 ControlMaster 選項 (僅限 macOS/Linux 用戶端),如啟用替代 SSH 驗證方法中所述,以便 VS Code 的兩個連線將透過與相同節點的單一 SSH 連線進行多工處理。

聯絡您的系統管理員以取得組態協助

SSH 是一種非常彈性的通訊協定,並支援許多組態。如果您在登入終端機或 Remote-SSH 輸出視窗中看到其他錯誤,則可能是由於缺少設定所致。

請聯絡您的系統管理員,以取得關於您的 SSH 主機和用戶端所需設定的資訊。連線至 SSH 主機的特定命令列引數可以新增至 SSH 組態檔

若要存取您的組態檔,請在命令面板 (F1) 中執行 Remote-SSH: 開啟組態檔...。然後,您可以與您的管理員合作新增必要的設定。

啟用替代 SSH 驗證方法

如果您要連線到 SSH 遠端主機,且符合下列其中一種情況

  • 使用雙因素驗證連線
  • 使用密碼驗證
  • SSH 代理程式未執行或無法存取時,使用具有密碼片語的 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

  1. 將類似這樣的項目新增至您的 SSH 組態檔

    Host *
        ControlMaster auto
        ControlPath  ~/.ssh/sockets/%r@%h-%p
        ControlPersist  600
    
  2. 然後執行 mkdir -p ~/.ssh/sockets 以建立 Socket 資料夾。

設定 SSH 代理程式

如果您使用具有密碼片語的金鑰連線到 SSH 主機,您應確保 SSH 代理程式正在本機執行。VS Code 會自動將您的金鑰新增至代理程式,因此您不必每次開啟遠端 VS Code 視窗時都輸入密碼片語。

若要驗證代理程式是否正在執行且可從 VS Code 的環境連線,請在本機 VS Code 視窗的終端機中執行 ssh-add -l。您應該會看到代理程式中金鑰的清單 (或指出它沒有金鑰的訊息)。如果代理程式未執行,請依照這些指示啟動它。啟動代理程式後,請務必重新啟動 VS Code。

Windows

若要在 Windows 上自動啟用 SSH 代理程式,請啟動本機管理員 PowerShell 並執行下列命令

# Make sure you're running as an Administrator
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

現在代理程式將在登入時自動啟動。

Linux

若要在背景啟動 SSH 代理程式,請執行

eval "$(ssh-agent -s)"

若要在登入時自動啟動 SSH 代理程式,請將下列幾行新增至您的 ~/.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 上執行。

在遠端提供本機 SSH 代理程式

您本機電腦上的 SSH 代理程式可讓 Remote - SSH 擴充功能連線到您選擇的遠端系統,而不會重複提示輸入密碼片語,但 Git 等在遠端執行的工具無法存取您在本機解鎖的私密金鑰。

您可以透過開啟遠端上的整合式終端機並執行 ssh-add -l 來查看此情況。命令應列出已解鎖的金鑰,但會回報關於無法連線到驗證代理程式的錯誤。設定 ForwardAgent yes 可讓本機 SSH 代理程式在遠端環境中可用,從而解決此問題。

您可以透過編輯您的 .ssh/config 檔案 (或 Remote.SSH.configFile 設定為的任何檔案 - 使用 Remote-SSH: 開啟 SSH 組態檔... 命令以確保) 並新增

Host *
    ForwardAgent yes

請注意,您可能想要更具限制性,且僅針對特定的具名主機設定選項。

修正 SSH 檔案權限錯誤

SSH 對於檔案權限可能很嚴格,如果權限設定不正確,您可能會看到「警告:未受保護的私密金鑰檔案!」等錯誤。有幾種方法可以更新檔案權限以修正此問題,這將在以下章節中說明。

本機 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 安裝 Windows 版 Git
macOS 已預先安裝。
Debian/Ubuntu 執行 sudo apt-get install openssh-client
RHEL / Fedora / CentOS 執行 sudo yum install openssh-clients

VS Code 將在 PATH 中尋找 ssh 命令。如果失敗,在 Windows 上,它會嘗試在 Windows 版 Git 的預設安裝路徑中尋找 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 中,移至服務管理員,在清單中選取「sshd」,然後按一下啟用。接下來移至防火牆,選取永久組態,然後在服務下檢查 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

依照下列步驟執行

  1. 在 Linux 上,將 .gitattributes 檔案新增至您的專案,以強制 Linux 和 Windows 之間的一致行尾,以避免由於兩個作業系統之間的 CRLF/LF 差異而導致的意外問題。如需詳細資訊,請參閱解決 WSL 中導致許多修改檔案的 Git 行尾問題

  2. 接下來,使用 Chocolatey 安裝 SSHFS-Winchoco install sshfs

  3. 安裝適用於 Windows 的 SSHFS 後,您可以使用檔案總管的連線網路磁碟機... 選項,路徑為 \\sshfs\user@hostname,其中 user@hostname 是您的遠端使用者和主機名稱 / IP。您可以使用命令提示字元編寫指令碼,如下所示:net use /PERSISTENT:NO X: \\sshfs\user@hostname

  4. 完成後,按一下檔案總管中磁碟機的滑鼠右鍵,然後選取中斷連線以中斷連線。

從終端機連線到遠端主機

設定主機後,您可以透過傳遞遠端 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 命令將判斷每次執行時需要更新哪些檔案,這比使用 scpsftp 等工具更有效率且更方便。如果您確實需要使用多檔案或效能密集型本機工具,這主要是要考慮的事項。

rsync 命令在 macOS 上可直接使用,在 Linux 上可以使用套件管理器安裝(例如在 Debian/Ubuntu 上使用 sudo apt-get install rsync)。對於 Windows,您需要使用 WSLCygwin 來存取此命令。

若要使用此命令,請導覽至您想要儲存同步內容的資料夾,並執行以下命令,將 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 Server

SSH 擴充功能提供一個命令,用於從遠端機器清理 VS Code Server,Remote-SSH: 從主機解除安裝 VS Code Server...。此命令執行兩項操作:它會終止任何正在執行的 VS Code Server 程序,並刪除伺服器安裝所在的資料夾。

如果您想要手動執行這些步驟,或者如果該命令對您不起作用,您可以執行類似這樣的腳本

# 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 Server 之前安裝在 ~/.vscode-remote 下,因此您也可以檢查該位置。

SSH 連線到遠端 WSL 2 主機

您可能想要使用 SSH 連線到在遠端機器上執行的 WSL 發行版。請查看本指南,以了解如何從外部機器 SSH 連線到 Windows 10 上的 Bash 和 WSL 2。

提交問題

如果您在使用 Remote-SSH 擴充功能時遇到問題,並且認為需要提交問題,請先確定您已詳閱本網站上的文件,然後查看疑難排解 Wiki 文件,以取得有關抓取記錄檔以及嘗試更多可能有助於縮小問題來源步驟的資訊。

開發容器秘訣

如果您想閱讀有關使用 Dev Containers 的提示,您可以前往 Dev Containers 提示與技巧

WSL 秘訣

首次啟動:VS Code Server 先決條件

某些 WSL Linux 發行版缺少 VS Code Server 啟動所需的程式庫。您可以使用其套件管理器將其他程式庫新增至您的 Linux 發行版。

Debian 和 Ubuntu

開啟 Debian 或 Ubuntu WSL Shell 以新增 wgetca-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: 新視窗 將開啟註冊為預設值的 WSL 發行版。

若要開啟非預設發行版,請從要使用的發行版的 WSL Shell 執行 code .,或使用 WSL: 使用發行版開啟新視窗

對於早於 Windows 10 2019 年 5 月更新(版本 1903)的 WSL 版本,WSL 命令只能使用預設發行版。因此,如果您同意變更預設發行版,WSL 擴充功能可能會提示您。

您可以隨時使用 wslconfig.exe 來變更您的預設值。

例如

wslconfig /setdefault Ubuntu

您可以執行以下命令來查看您已安裝哪些發行版

wslconfig /l

設定伺服器啟動的環境

當 WSL 擴充功能在 WSL 中啟動 VS Code Server 時,它不會執行任何 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

這是 WSL 的一項功能,路徑會從 Windows 中的 PATH 變數繼承。若要變更 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: 開啟記錄 來開啟 WSL 記錄。記錄將顯示在 WSL 索引標籤下的終端機檢視中。

WSL Log

若要取得更詳細的記錄,請在使用者設定中啟用設定 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: 嘗試重新命名開啟工作區中的資料夾時發生權限遭拒錯誤

這是 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,但 Windows 批次檔除外,這些檔案需要 CRLF

* 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 金鑰。)

只需依照以下步驟操作

  1. Windows 命令提示字元PowerShell 中執行以下命令,以設定 Windows 上的認證管理員

     git config --global credential.helper wincred
    
  2. 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 的 已知 Web 限制和調整

擴充功能秘訣

雖然許多擴充功能可以未經修改地運作,但仍有一些問題可能會阻止某些功能如預期般運作。在某些情況下,您可以使用另一個命令來解決此問題,而在其他情況下,可能需要修改擴充功能。本節提供常見問題和解決提示的快速參考。您也可以參考關於 支援遠端開發 的主要擴充功能文章,以取得有關修改擴充功能以支援遠端擴充功能主機的深入指南。

解決有關遺失相依性的錯誤

某些擴充功能依賴於某些 WSL Linux 發行版的基本安裝中找不到的程式庫。您可以使用其套件管理器將其他程式庫新增至您的 Linux 發行版。對於基於 Ubuntu 和 Debian 的發行版,執行 sudo apt-get install <package> 以安裝所需的程式庫。請查看您的擴充功能的文件或錯誤訊息中提及的執行階段,以取得其他安裝詳細資訊。

遠端套用時,本機絕對路徑設定失敗

當您連線到遠端端點時,VS Code 的本機使用者設定會重複使用。雖然這可以保持您使用者體驗的一致性,但由於目標位置不同,您可能需要在本機和每個主機/容器/WSL 之間變更絕對路徑設定。

解決方案: 您可以在連線到遠端端點後,透過從命令面板 (F1) 執行 喜好設定:開啟遠端設定 命令,或在設定編輯器中選取 遠端 索引標籤來設定特定於端點的設定。每當您連線時,這些設定都會覆寫您已設定的任何本機設定。

需要在遠端端點上安裝本機 VSIX

有時您想要在遠端機器上安裝本機 VSIX,無論是在開發期間還是當擴充功能作者要求您試用修復程式時。

解決方案: 一旦您連線到 SSH 主機、容器或 WSL,您就可以使用與在本機相同的方式安裝 VSIX。從命令面板 (F1) 執行 擴充功能:從 VSIX 安裝... 命令。您可能還想要將 "extensions.autoUpdate": false 新增到 settings.json,以防止自動更新到最新的 Marketplace 版本。請參閱 支援遠端開發,以取得有關在遠端環境中開發和測試擴充功能的更多資訊。

瀏覽器未在本機開啟

某些擴充功能使用外部節點模組或自訂程式碼來啟動瀏覽器視窗。不幸的是,這可能會導致擴充功能在遠端而非本機啟動瀏覽器。

解決方案: 擴充功能可以使用 vscode.env.openExternal API 來解決此問題。請參閱 擴充功能作者指南 以取得詳細資訊。

剪貼簿無法運作

某些擴充功能使用節點模組(例如 clipboardy)與剪貼簿整合。不幸的是,這可能會導致擴充功能錯誤地與遠端端的剪貼簿整合。

解決方案: 擴充功能可以切換到 VS Code 剪貼簿 API 來解決此問題。請參閱 擴充功能作者指南 以取得詳細資訊。

無法從瀏覽器或應用程式存取本機 Web 伺服器

在容器、SSH 主機中工作,或透過 GitHub Codespaces 工作時,瀏覽器連線的埠可能會被封鎖。

解決方案: 擴充功能可以使用 vscode.env.openExternalvscode.env.asExternalUri API(自動轉發 localhost 埠)來解決此問題。請參閱 擴充功能作者指南 以取得詳細資訊。作為一種變通方法,請使用 轉發埠 命令手動執行此操作。

Webview 內容未顯示

如果擴充功能的 webview 內容使用 iframe 連線到本機 Web 伺服器,則 webview 連線的埠可能會被封鎖。此外,如果擴充功能硬式編碼 vscode-resource:// URI 而不是使用 asWebviewUri,則內容可能不會顯示在 Codespaces 瀏覽器編輯器中。

解決方案: 擴充功能可以使用 webview.asWebviewUri 來解決 vscode-resource:// URI 的問題。

如果埠被封鎖,最佳方法是改為使用 webview 訊息傳遞 API。作為一種變通方法,可以使用 vscode.env.asExternalUri 允許 webview 從 VS Code 連線到衍生的 localhost Web 伺服器。但是,目前對於基於瀏覽器的 Codespaces 編輯器(僅限)而言,這被 MicrosoftDocs/vscodespaces#11 封鎖。請參閱 擴充功能作者指南,以取得有關變通方法的詳細資訊。

封鎖的 localhost 埠

如果您嘗試從外部應用程式連線到 localhost 埠,則該埠可能會被封鎖。

解決方案: VS Code 1.40 引入了一個新的 vscode.env.asExternalUri API,供擴充功能以程式設計方式轉發任意埠。請參閱 擴充功能作者指南 以取得詳細資訊。作為一種變通方法,您可以使用 轉發埠 命令手動執行此操作。

儲存擴充功能資料時發生錯誤

擴充功能可能會嘗試透過尋找 Linux 上的 ~/.config/Code 資料夾來持久儲存全域資料。此資料夾可能不存在,這可能會導致擴充功能擲回類似 ENOENT: no such file or directory, open '/root/.config/Code/User/filename-goes-here 的錯誤。

解決方案: 擴充功能可以使用 context.globalStorageUricontext.storageUri 屬性來解決此問題。請參閱 擴充功能作者指南 以取得詳細資訊。

無法登入/每次連線到新端點時都必須登入

需要登入的擴充功能可能會使用自己的程式碼來持久儲存密碼。由於缺少相依性,此程式碼可能會失敗。即使成功,密碼也會遠端儲存,這表示您必須為每個新端點登入。

解決方案: 擴充功能可以使用 SecretStorage API 來解決此問題。請參閱 擴充功能作者指南 以取得詳細資訊。

不相容的擴充功能阻止 VS Code 連線

如果遠端主機、容器或 WSL 上安裝了不相容的擴充功能,我們已經看到 VS Code Server 由於不相容而停止回應或崩潰的案例。如果擴充功能立即啟動,這可能會阻止您連線並能夠解除安裝擴充功能。

解決方案: 依照以下步驟手動刪除遠端擴充功能資料夾

  1. 對於容器,請確保您的 devcontainer.json 不再包含對錯誤擴充功能的參考。

  2. 接下來,使用單獨的終端機/命令提示字元連線到遠端主機、容器或 WSL。

    • 如果是 SSH 或 WSL,請相應地連線到環境(執行 ssh 以連線到伺服器或開啟 WSL 終端機)。
    • 如果使用容器,請呼叫 docker ps -a 並在列表中尋找具有正確名稱的映像,以識別容器 ID。如果容器已停止,請執行 docker run -it <id> /bin/sh。如果正在執行,請執行 docker exec -it <id> /bin/sh
  3. 連線後,針對 VS Code Stable 執行 rm -rf ~/.vscode-server/extensions 和/或針對 VS Code Insiders 執行 rm -rf ~/.vscode-server-insiders/extensions,以移除所有擴充功能。

隨附或取得預先建置原生模組的擴充功能失敗

與 VS Code 擴充功能捆綁在一起(或動態取得)的原生模組必須使用 Electron 的 electron-rebuild 重新編譯。但是,VS Code Server 執行標準 (非 Electron) 版本的 Node.js,這可能會導致二進位檔在遠端使用時失敗。

解決方案: 需要修改擴充功能才能解決此問題。它們將需要包含(或動態取得)兩組二進位檔(Electron 和標準 Node.js),以用於 VS Code 隨附的 Node.js 中的 "modules" 版本,然後檢查其啟動函數中是否有 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 (musl) 和其他發行版 (glibc) 中 libc 的實作方式之間存在 基本差異,因此包含的原生程式碼或執行階段可能無法運作。

解決方案: 擴充功能將需要選擇加入支援這些平台,方法是編譯/包含這些額外目標的二進位檔。重要的是要注意,某些協力廠商 npm 模組也可能包含可能導致此問題的原生程式碼。因此,在某些情況下,您可能需要與 npm 模組作者合作以新增其他編譯目標。請參閱 擴充功能作者指南 以取得詳細資訊。

擴充功能由於缺少模組而失敗

依賴於 Electron 或 VS Code 基礎模組(擴充功能 API 未公開)且未提供後備方案的擴充功能,在遠端執行時可能會失敗。您可能會在開發人員工具主控台中看到錯誤,例如找不到 original-fs

解決方案: 移除對 Electron 模組的相依性或提供後備方案。請參閱 擴充功能作者指南 以取得詳細資訊。

無法存取/將遠端工作區檔案傳輸到本機機器

在外部應用程式中開啟工作區檔案的擴充功能可能會遇到錯誤,因為外部應用程式無法直接存取遠端檔案。

解決方案: 如果您建立旨在在本機執行的「UI」擴充功能,則可以使用 vscode.workspace.fs API 與遠端工作區檔案系統互動。然後,您可以將其作為「工作區」擴充功能的相依性,並根據需要使用命令來叫用它。請參閱 擴充功能作者指南,以取得有關不同類型擴充功能以及如何使用命令在它們之間進行通訊的詳細資訊。

無法從擴充功能存取已連接的裝置

存取本機連接裝置的擴充功能在遠端執行時將無法連線到這些裝置。

解決方案: 目前沒有。我們正在研究解決此問題的最佳方法。

問題與意見反應

回報問題

如果您在使用其中一個遠端開發擴充功能時遇到問題,請務必收集正確的記錄,以便我們能夠幫助診斷您的問題

每個遠端擴充功能都有一個命令可以檢視其記錄。

您可以使用命令面板 (F1) 中的 Remote-SSH: 顯示記錄 來取得 Remote - SSH 擴充功能記錄。在回報 Remote - SSH 問題時,也請驗證您是否可以從外部終端機(未使用 Remote - SSH)SSH 連線到您的機器。

同樣地,您可以使用 Dev Containers: 顯示容器記錄 來取得 Dev Containers 擴充功能記錄。

與上述兩個類似,您可以使用 WSL: 顯示記錄 來取得 WSL 擴充功能記錄。另請檢查您的問題是否正在 WSL 儲存庫 中追蹤(而不是由於 WSL 擴充功能)。

如果您在使用其他遠端擴充功能時遇到問題(例如,其他擴充功能未在遠端內容中正確載入或安裝),則從 遠端擴充功能主機 輸出通道(輸出:專注於輸出檢視)抓取記錄會很有幫助,並從下拉式選單中選取 記錄 (遠端擴充功能主機)

注意:如果您只看到 記錄 (擴充功能主機),這是本機擴充功能主機,而遠端擴充功能主機未啟動。這是因為記錄通道僅在記錄檔建立後才會建立,因此如果遠端擴充功能主機未啟動,則不會建立遠端擴充功能主機記錄檔,並且不會顯示在「輸出」檢視中。這仍然是包含在您的問題中的有用資訊。

遠端問題和意見反應資源

我們有多種其他遠端資源