連線至 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 伺服器

如果 ssh 尚未在您的 Linux 系統上設定並執行,請遵循下列步驟進行安裝。 本文中的範例使用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 中,選擇 功能表列上的 [工具 > 選項 ] 以開啟 [ 選項 ] 對話框。 然後選取 [跨平臺 > 連線 管理員] 以開啟 [連線 ion Manager] 對話框。

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

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

    Visual Studio 選項窗格的螢幕快照。已選取 CrossPlatform > C++ > 連線 ion Manager,並醒目提示 [新增] 按鈕。

    在任一案例中,會顯示 [遠端系統] 視窗 連線。

    Visual Studio 連線 至遠端系統視窗的螢幕快照。 主機名、埠、使用者名稱、驗證類型和密碼都有欄位。 埠設定為22。 驗證類型設定為 「密碼」。 :::image-end:::

  3. 輸入下列資訊:

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

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

    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 建立新的遠端連線時,系統會要求您接受或拒絕伺服器所提供的主機密鑰指紋。 或者,每當有快取指紋的變更時。 您也可以視需要驗證指紋:在 連線 ion Manager 中選取連線,然後選擇 [驗證]。

如果您從舊版升級至 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 伺服器 (sudo service ssh restart 在 Ubuntu 上),然後嘗試從 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_”。

連線 Ion Manager 的命令行公用程式

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

TCP 埠轉送

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

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

rsync Visual Studio 的 CMake 支援也會使用 ,將來源檔案複製到遠端系統。 如果您無法啟用 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 連接埠轉送。 rsync如果遠端系統上停用 TCP 埠轉送,和 gdbserver 都會受到影響。 如果此相依性影響您,請在 開發人員社群 投票給此建議票證

連線到 WSL

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

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

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

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

修正 WSL localhost 連線問題

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

Port 23

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

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

進行這些變更之後,請重新啟動 SSH 伺服器 (sudo service ssh restart 在 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 偵錯工作階段