連線至 Visual Studio 中的目標 Linux 系統

Visual Studio 2017 及更新版本支援 Linux。

您可以設定 Linux 專案,以遠端電腦或適用於 Linux 的 Windows 子系統 (WSL) 為目標。 針對遠端電腦以及 WSL,您需要在 Visual Studio 2017 設定遠端連線。

您可以設定 Linux 專案,以遠端電腦或適用於 Linux 的 Windows 子系統 (WSL) 為目標。 針對遠端電腦,您需要在 Visual Studio 設定遠端連線。 若要連線到 WSL,請直接跳至 [連線到 WSL] 區段。

使用遠端連線時,Visual Studio 會在遠端電腦上建置 C++ Linux 專案。 如果是實體機器、雲端中的虛擬機器或 WSL 則不重要。 若要建置專案,Visual Studio 會將原始程式碼複製到遠端 Linux 電腦。 然後,程式碼會根據 Visual Studio 設定進行編譯。

注意

從 Visual Studio 2019 16.5 版開始,Visual Studio 支援安全、聯邦資訊處理標準 (FIPS) 140-2 兼容密碼編譯連線到 Linux 系統以進行遠端開發。 若要使用符合 FIPS 標準的連線,請遵循設定符合 FIPS 規範的安全遠端 Linux 開發中的步驟。

在遠端系統上設定 SSH 伺服器

如果尚未在您的 Linux 系統上設定並執行 ssh,請遵循下列步驟進行安裝。 本文中的範例使用 Ubuntu18.04 LTS 搭配 OpenSSH 伺服器 7.6 版。 不過,對於任何使用中等最新版本 OpenSSH 的散發版本,這些指示應該相同。

  1. 在 Linux 系統上,安裝並啟動 OpenSSH 伺服器:

    sudo apt install openssh-server
    sudo service ssh start
    
  2. 如果您想要在系統開機時自動啟動 ssh 伺服器,請使用 systemctl 加以啟用:

    sudo systemctl enable ssh
    

設定遠端連線

  1. 在 [Visual Studio] 中,請從功能表列中選擇 [工具]>[選項]來開啟[選項]對話方塊。 然後選取 [跨平台 > 連線管理員] 開啟 [連線管理員] 對話方塊。

    如果您之前尚未在 Visual Studio 中設定連線,當您第一次建置專案時,Visual Studio 會為您開啟 [連線管理員] 對話方塊。

  2. 在 [連線管理員] 對話框中,選擇 [新增] 按鈕以新增連線。

    Visual Studio 選項窗格的螢幕擷取畫面。

    在選項窗格中,已選取 [CrossPlatform > C++ > 連線管理員],並醒目提示 [新增] 按鈕。

    若要編輯現有的連線,請選擇 [編輯]。 在任一情況下,將會顯示 [Connect to Remote System]\(連線到遠端系統) 視窗。

    Visual Studio [連線到遠端系統] 視窗的螢幕擷取畫面。

    在 [連線到遠端系統] 視窗中,有主機名、連接埠、使用者名稱、驗證類型和密碼的字段。 連接埠設為 22。 驗證類型設定為「密碼」。

  3. 輸入下列資訊:

    Entry 描述
    Host Name 目標裝置的名稱或 IP 位址
    通訊埠 正在執行 SSH 服務的連接埠,一般是 22
    使用者名稱 驗證使用者身分
    驗證類型 同時支援密碼和私密金鑰
    密碼 所輸入使用者名稱的密碼
    私密金鑰檔 為 SSH 連線所建立的私密金鑰檔案
    複雜密碼 與上面選取的私密金鑰搭配使用的複雜密碼

    除非完成所有必要的欄位,且連接埠設定為介於 1 到 65535 之間的整數,否則您無法按兩下 [連線] 按鈕。

    您可以使用密碼或金鑰檔案和複雜密碼進行驗證。 在許多的開發案例中,密碼驗證已經足夠,但金鑰檔案會更加安全。 如果您已經有金鑰組,則可以重複使用。

    17.10 之前的 Visual Studio 版本支援遠端連線的 EC、RSA 和 DSA 金鑰。 由於安全性考慮,VS 17.10 和更新版本中不再支援 RSA 和 DSA 金鑰。 目前僅支援 EC 金鑰。 若要建立與連接管理員相容的金鑰組,請使用 下列命令:ssh-keygen -m pem -t ecdsa -f <key-name>

    注意

    如果使用 ssh-keygen 建立私密金鑰,您必須指定參數 -m pem,否則 Visual Studio 將不會接受金鑰。 如果您的私密金鑰以 -----BEGIN OPENSSH PRIVATE KEY----- 開頭,則必須使用 ssh-keygen -p -f <FILE> -m pem來轉換。

  4. 選取 [連線] 按鈕,嘗試連線到遠端電腦。

    如果連線成功,Visual Studio 會將 IntelliSense 設定為使用遠端標頭。 如需詳細資訊,請參閱適用於遠端系統標頭的 IntelliSense

    如果連線失敗,會出現錯誤資訊的資訊列,而可能需要變更的欄位會以紅色框起。

    Visual Studio [連線到遠端系統] 視窗的螢幕擷取畫面。主機名和連接埠欄位會以紅色框起,以指出不正確的專案。

    如果您使用金鑰檔案進行驗證,請確保目標電腦的 SSH 伺服器正在執行而且設定正確。

    如果您在 localhost 上連線到 WSL 時遇到問題,請參閱修正 WSL localhost 連線問題

主機金鑰驗證

在 Visual Studio 16.10 版或更新版本中,每當 Visual Studio 第一次連線到遠端系統時,系統會要求您確認伺服器的主機金鑰指紋。 如果您之前曾使用 OpenSSH 命令行用戶端或 PuTTY,您可能已熟悉此程式。 指紋會識別伺服器。 Visual Studio 會使用指紋來確保其連線到預定且受信任的伺服器。

Visual Studio 第一次建立遠端連線時,您會被要求接受或拒絕伺服器所提供的主機金鑰指紋。 或者,每當有快取指紋的變更時。 您也可以檢視需要確認指紋:選取連線管理員中的連線機,然後選擇 [驗證]

如果您從舊版升級至 Visual Studio 16.10 或更新版本,這會將任何現有的遠端連線視為新的連線。 系統會提示您先接受主機金鑰指紋。 然後,Visual Studio 會建立連線並快取已接受的指紋。

您也可以使用 update 引數,從 ConnectionManager.exe 更新遠端連線。

支援的 SSH 演算法

從 Visual Studio 16.9 版開始,已移除舊版不安全的 SSH 演算法,以加密資料和交換金鑰。 僅支援支援下列演算法。 用戶端對伺服器和伺服器對用戶端 SSH 通訊都予以支援:

演算法類型 支援的演算法
加密 aes128-cbc
aes128-ctr
aes192-cbc
aes192-ctr
aes256-cbc
aes256-ctr
HMAC hmac-sha2-256
hmac-sha2-512
金鑰交換 diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
主機金鑰 ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521

設定 SSH 伺服器

首先,來了解一下背景。 您無法從 Visual Studio 選取要使用的 SSH 演算法。 相反地,演算法會在與 SSH 伺服器的初始交握期間決定。 每一端 (用戶端和伺服器) 都會提供支援的演算法清單,然後選取兩者通用的第一個演算法。 只要 Visual Studio 與伺服器之間至少有一個演算法用於加密、HMAC、金鑰交換等等,連線就會成功。

Open SSH 組態檔 (sshd_config) 不會設定預設要使用的演算法。 未指定演算法時,SSH 伺服器應該使用安全預設值。 這些預設值取決於 SSH 伺服器的版本和廠商。 如果 Visual Studio 不支援這些預設值,您可能會看到如下的錯誤:「無法連線到遠端系統。 找不到伺服器 HMAC 演算法的常見用戶端。」如果 SSH 伺服器設定為使用 Visual Studio 不支援的演算法,也可能會出現此錯誤。

大部分新式 Linux 發行版上的預設 SSH 伺服器應搭配 Visual Studio 使用。 不過,您可能會執行設定為使用較舊不安全演算法的較舊 SSH 伺服器。 下列範例說明如何更新為更安全的版本。

在下列範例中,SSH 伺服器會使用 Visual Studio 16.9 不支援的不安全 hmac-sha1 演算法。 如果 SSH 伺服器使用 OpenSSH,您可以編輯 /etc/ssh/sshd_config 檔案,如下所示,以啟用更安全的演算法。 如需其他 SSH 伺服器,請參閱伺服器的文件,以了解如何設定。

首先,確認伺服器所使用的演算法集合包含 Visual Studio 支援的演算法。 在遠端電腦上執行下列命令,以列出伺服器支援的演算法:

ssh -Q cipher; ssh -Q mac; ssh -Q kex; ssh -Q key

命令會產生如下的輸出:

3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
...
ecdsa-sha2-nistp521-cert-v01@openssh.com
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com

輸出會列出 SSH 伺服器支援的所有加密、HMAC、金鑰交換和主機金鑰演演算法。 如果清單不包含 Visual Studio 支援的演算法,請在繼續之前先升級您的 SSH 伺服器。

您可以在遠端電腦上編輯 /etc/ssh/sshd_config,以啟用 Visual Studio 支援的演算法。 下列範例示範如何將不同類型的演算法新增至該組態檔。

這些範例可以在 /etc/ssh/sshd_config中的任何位置新增。 請確定它們位於自己的行上。

編輯檔案之後,請重新啟動 SSH 伺服器 (Ubuntu 上的sudo service ssh restart),然後嘗試從 Visual Studio 再次連線。

加密範例

新增:Ciphers <algorithms to enable>
例如:Ciphers aes128-cbc,aes256-cbc

HMAC 範例

新增:MACs <algorithms to enable>
例如:MACs hmac-sha2-256,hmac-sha2-512

金鑰交換範例

新增:KexAlgorithms <algorithms to enable>
例如:KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384

主機金鑰範例

新增:HostKeyAlgorithms <algorithms to enable>
例如:HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384

遠端連線記錄

您可以啟用記錄來協助針對連線問題進行疑難排解。 在功能表列上選取 [工具] > [選項]。 在 [選項] 對話方塊中,選取 [跨平台]>

Visual Studio 選項畫面的螢幕擷取畫面。

選項會開啟至 [跨平台 > 連接管理員 > 記錄]。 已核取 [啟用記錄]、核取 [記錄到檔案]、[記錄檔目錄] 已設定 [文件] 資料夾,並核取 [輸出] 視窗中的 [跨平台記錄] 窗格。

記錄檔包含連線、傳送到遠端電腦 (其文字、結束代碼和執行時間) 的所有命令,以及從 Visual Studio 到殼層的所有輸出。 記錄適用於任何跨平台的 CMake 專案或 Visual Studio 中的 MSBuild 型 Linux 專案。

您可以設定輸出到檔案或 [輸出] 視窗中的 [跨平台記錄] 窗格。 對於 MSBuild 型 Linux 專案,傳送到遠端電腦的 MSBuild 命令不會路由傳送至 [輸出視窗],因為它們是跨處理序發出的。 但是,這會會記錄具有 "msbuild_" 前置詞的檔案中。

連接管理員的命令行公用程式

Visual Studio 2019 16.5 版或更新版本ConnectionManager.exe 是管理 Visual Studio 外部遠端開發連線的命令行公用程式。 這適用於佈建新開發機器等工作。 或者,您可以使用它來設定 Visual Studio 以進行持續整合。 如需 ConnectionManager 命令的範例和完整參考,請參閱 ConnectionManager 參考

TCP 連接埠轉送

MSBuild 型 Linux 專案和 CMake 專案都會使用 rsync 命令,將標頭從遠端系統複製到 Windows,以供 IntelliSense 使用。 當您無法啟用 TCP 連接埠轉送時,請停用遠端標頭的自動下載。 若要停用,請使用至 [工具] > [選項] > [跨平台] > [連線管理員] > [遠端標頭 IntelliSense 管理員]。 如果遠端系統未啟用 TCP 連接埠轉送,當 IntelliSense 的遠端標頭下載開始時,會出現此錯誤:

無法開啟 SSH 通道 Visual Studio 錯誤訊息的螢幕快照。提供記錄檔的路徑。

Visual Studio 的 CMake 支援也會使用 rsync,將來源檔案複製到遠端系統。 如果您無法啟用 TCP 連接埠轉送,您可以使用 sftp 作為遠端複製來源方法。 sftp 通常比 rsync 慢,但與 TCP 連接埠轉送沒有相依性。 您可以使用 CMake 設定編輯器中的remoteCopySourcesMethod屬性來管理遠端複製來源方法。 如果遠端系統上停用 TCP 連接埠轉送,第一次叫用 rsync 時,CMake 輸出視窗中會出現錯誤。

Visual Studio 輸出視窗的螢幕快照,其中顯示 Rsync 錯誤訊息。

輸出視窗包含下列訊息:確認已在伺服器上啟用 TCP 轉送,rsync:未看到伺服器問候語,rsync 錯誤:在 main.c (1675) [sender=3.1.3] 啟動用戶端-伺服器通訊協定 (代碼 5) 時發生錯誤,無法開啟 SSH 通道。

gdbserver 可用於在內嵌裝置上進行偵錯。 如果您無法啟用 TCP 連接埠轉送,則必須對所有遠端偵錯案例使用 gdb。 在遠端系統上偵錯專案時,預設會使用 gdb

Visual Studio 的 Linux 支援相依於 TCP 連接埠轉送。 如果遠端系統上停用 TCP 埠轉送,rsyncgdbserver 都會受到影響。 如果此相依性影響您,請在開發人員社群上投票給此建議票證

連線到 WSL

在 Visual Studio 2017 中,您可以使用與遠端 Linux 電腦相同的步驟來連線到 WSL。 針對主機名稱使用 localhost

從 Visual Studio 2019 16.1 版開始,使用 Windows 子系統 Linux 版 (WSL) 時對使用 C++ 原生支援。 這表示您可以直接在本機 WSL 安裝上建置和偵錯。 您不再需要新增遠端連線或設定 SSH。 您可於此處找到如何安裝 WSL的詳細資料。

若要設定 WSL 安裝以使用 Visual Studio,您需要安裝下列工具:gccclanggdbmakeninja-build (僅適用於使用 Visual Studio 2019 16.6 版或更新版本的 CMake 專案)、rsynczip。 您可以使用此指令,在使用 apt 的散發版本上安裝,這也會安裝 g++ 編譯器:

sudo apt install g++ gdb make ninja-build rsync zip

修正 WSL localhost 連線問題

localhost連線到 Windows 子系統 Linux 版 (WSL) 時,您可能會在連接埠 22 上與 Windowsssh 客戶端發生衝突。 在 WSL 中,將ssh預期要求從 /etc/ssh/sshd_config 中的 23 變更為:

Port 23

如果您要使用密碼進行連線,請確定下列項目在 /etc/ssh/sshd_config中設定:

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes

進行這些變更之後,請重新啟動 SSH 伺服器 (sudo service ssh restart on Ubuntu)。

然後使用連接埠 23 重試連線至 localhost

如需詳細資訊,請參閱下載、安裝及設定 Linux 工作負載

若要設定 WSL 的 MSBuild 專案,請參閱設定 Linux 專案。 若要針對 WSL 設定 CMake 專案,請參閱設定 Linux CMake 專案。 為了遵循逐步指示來透過 WSL 建立簡單的主控台應用程式,請閱讀這篇簡介部落格文章:C++ with Visual Studio 2019 and the Windows Subsystem for Linux (WSL)

另請參閱

設定 Linux 專案
設定 Linux CMake 專案
部署、執行及偵錯 Linux 專案
設定 CMake 偵錯工作階段