連線至 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 的散發版本,這些指示應該相同。
在 Linux 系統上,安裝並啟動 OpenSSH 伺服器:
sudo apt install openssh-server sudo service ssh start
如果您想要在系統開機時自動啟動 ssh 伺服器,請使用 systemctl 加以啟用:
sudo systemctl enable ssh
設定遠端連線
在 [Visual Studio] 中,請從功能表列中選擇 [工具]>[選項]來開啟[選項]對話方塊。 然後選取 [跨平台 > 連線管理員] 開啟 [連線管理員] 對話方塊。
如果您之前尚未在 Visual Studio 中設定連線,當您第一次建置專案時,Visual Studio 會為您開啟 [連線管理員] 對話方塊。
在 [連線管理員] 對話框中,選擇 [新增] 按鈕以新增連線。
在選項窗格中,已選取 [CrossPlatform > C++ > 連線管理員],並醒目提示 [新增] 按鈕。
若要編輯現有的連線,請選擇 [編輯]。 在任一情況下,將會顯示 [Connect to Remote System]\(連線到遠端系統) 視窗。
在 [連線到遠端系統] 視窗中,有主機名、連接埠、使用者名稱、驗證類型和密碼的字段。 連接埠設為 22。 驗證類型設定為「密碼」。
輸入下列資訊:
Entry 描述 Host Name 目標裝置的名稱或 IP 位址 通訊埠 正在執行 SSH 服務的連接埠,一般是 22 使用者名稱 驗證使用者身分 驗證類型 同時支援密碼和私密金鑰 密碼 所輸入使用者名稱的密碼 私密金鑰檔 為 SSH 連線所建立的私密金鑰檔案 複雜密碼 與上面選取的私密金鑰搭配使用的複雜密碼 除非完成所有必要的欄位,且連接埠設定為介於 1 到 65535 之間的整數,否則您無法按兩下 [連線] 按鈕。
您可以使用密碼或金鑰檔案和複雜密碼進行驗證。 金鑰檔案比使用者名稱/密碼更安全。 如果您已經有金鑰組,則可以重複使用。
17.10 之前的 Visual Studio 版本支援橢圓曲線 (EC)、Rivert-Shamir-Adleman (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
來轉換。選取 [連線] 按鈕,嘗試連線到遠端電腦。
如果連線成功,Visual Studio 會將 IntelliSense 設定為使用遠端標頭。 如需詳細資訊,請參閱適用於遠端系統標頭的 IntelliSense。
如果連線失敗,會出現錯誤資訊的資訊列,而可能需要變更的欄位會以紅色框起。
如果您使用金鑰檔案進行驗證,請確保目標電腦的 SSH 伺服器正在執行而且設定正確。
如果您在
localhost
上連線到 WSL 時遇到問題,請參閱修正 WSLlocalhost
連線問題。
主機金鑰驗證
在 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 到殼層的所有輸出。 記錄適用於任何跨平台的 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 的遠端標頭下載開始時,會出現此錯誤:
Visual Studio 的 CMake 支援也會使用 rsync
,將來源檔案複製到遠端系統。 如果您無法啟用 TCP 連接埠轉送,您可以使用 sftp
作為遠端複製來源方法。 sftp
通常比 rsync
慢,但與 TCP 連接埠轉送沒有相依性。 您可以使用 CMake 設定編輯器中的remoteCopySourcesMethod
屬性來管理遠端複製來源方法。 如果遠端系統上停用 TCP 連接埠轉送,第一次叫用 rsync
時,CMake 輸出視窗中會出現錯誤。
輸出視窗包含下列訊息:確認已在伺服器上啟用 TCP 轉送,rsync:未看到伺服器問候語,rsync 錯誤:在 main.c (1675) [sender=3.1.3] 啟動用戶端-伺服器通訊協定 (代碼 5) 時發生錯誤,無法開啟 SSH 通道。
gdbserver
可用於在內嵌裝置上進行偵錯。 如果您無法啟用 TCP 連接埠轉送,則必須對所有遠端偵錯案例使用 gdb
。 在遠端系統上偵錯專案時,預設會使用 gdb
。
Visual Studio 的 Linux 支援相依於 TCP 連接埠轉送。 如果遠端系統上停用 TCP 埠轉送,rsync
和 gdbserver
都會受到影響。 如果此相依性影響您,請在開發人員社群上投票給此建議票證。
連線到 WSL
在 Visual Studio 2017 中,您可以使用與遠端 Linux 電腦相同的步驟來連線到 WSL。 針對主機名稱使用 localhost
。
從 Visual Studio 2019 16.1 版開始,使用 Windows 子系統 Linux 版 (WSL) 時對使用 C++ 原生支援。 這表示您可以直接在本機 WSL 安裝上建置和偵錯。 您不再需要新增遠端連線或設定 SSH。 您可於此處找到如何安裝 WSL的詳細資料。
若要設定 WSL 安裝以使用 Visual Studio,您需要安裝下列工具:gcc
或 clang
、gdb
、make
、ninja-build
(僅適用於使用 Visual Studio 2019 16.6 版或更新版本的 CMake 專案)、rsync
和 zip
。 您可以使用此指令,在使用 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 偵錯工作階段