Nawiązywanie połączenia z docelowym systemem Linux w programie Visual Studio
Obsługa systemu Linux jest dostępna w programie Visual Studio 2017 lub nowszym.
Projekt systemu Linux można skonfigurować tak, aby był przeznaczony dla maszyny zdalnej lub Podsystem Windows dla systemu Linux (WSL). W przypadku maszyn zdalnych i WSL należy skonfigurować połączenie zdalne w programie Visual Studio 2017.
Projekt systemu Linux można skonfigurować tak, aby był przeznaczony dla maszyny zdalnej lub Podsystem Windows dla systemu Linux (WSL). W przypadku maszyny zdalnej należy skonfigurować połączenie zdalne w programie Visual Studio. Aby nawiązać połączenie z usługą WSL, przejdź do sekcji Łączenie z usługą WSL .
W przypadku korzystania z połączenia zdalnego program Visual Studio kompiluje projekty języka C++ dla systemu Linux na maszynie zdalnej. Nie ma znaczenia, czy jest to maszyna fizyczna, maszyna wirtualna w chmurze, czy WSL. Aby skompilować projekt, program Visual Studio kopiuje kod źródłowy na zdalny komputer z systemem Linux. Następnie kod zostanie skompilowany na podstawie ustawień programu Visual Studio.
Uwaga
Począwszy od programu Visual Studio 2019 w wersji 16.5, program Visual Studio obsługuje bezpieczne, Federal Information Processing Standard (FIPS) 140-2 zgodne połączenia kryptograficzne z systemami Linux na potrzeby programowania zdalnego. Aby użyć połączenia zgodnego ze standardem FIPS, wykonaj kroki opisane w artykule Konfigurowanie bezpiecznego programowania zdalnego systemu Linux zgodnego ze standardem FIPS.
Konfigurowanie serwera SSH w systemie zdalnym
Jeśli ssh
nie jest jeszcze skonfigurowany i uruchomiony w systemie Linux, wykonaj następujące kroki, aby go zainstalować. Przykłady w tym artykule używają systemu Ubuntu 18.04 LTS z serwerem OpenSSH w wersji 7.6. Jednak instrukcje powinny być takie same dla każdej dystrybucji przy użyciu umiarkowanie najnowszej wersji protokołu OpenSSH.
W systemie Linux zainstaluj i uruchom serwer OpenSSH:
sudo apt install openssh-server sudo service ssh start
Jeśli chcesz, aby serwer SSH był uruchamiany automatycznie po uruchomieniu systemu, włącz go przy użyciu biblioteki systemctl:
sudo systemctl enable ssh
Konfigurowanie połączenia zdalnego
W programie Visual Studio wybierz pozycję Narzędzia > Opcje na pasku menu, aby otworzyć okno dialogowe Opcje . Następnie wybierz Menedżer połączeń międzyplatformowe > , aby otworzyć okno dialogowe Menedżer połączeń.
Jeśli wcześniej nie skonfigurowaliśmy połączenia w programie Visual Studio, podczas tworzenia projektu po raz pierwszy program Visual Studio otwiera okno dialogowe Menedżer połączeń.
W oknie dialogowym Menedżer połączeń wybierz przycisk Dodaj, aby dodać nowe połączenie.
W okienku opcji wybrano > Menedżer połączeń crossPlatform > C++ i wyróżniono przycisk Dodaj.
Aby edytować istniejące połączenie, wybierz pozycję Edytuj. W obu scenariuszach zostanie wyświetlone okno Łączenie z systemem zdalnym.
W oknie Łączenie z systemem zdalnym istnieją pola dla nazwy hosta, portu, nazwy użytkownika, typu uwierzytelniania i hasła. Port jest ustawiony na 22. Typ uwierzytelniania ma wartość "Hasło".
Wprowadź następujące informacje:
Wpis opis Nazwa hosta Nazwa lub adres IP urządzenia docelowego Port Port, na którym działa usługa SSH, zazwyczaj 22 Nazwa użytkownika Użytkownik do uwierzytelniania jako Authentication type (Typ uwierzytelniania) Hasło i klucz prywatny są obsługiwane Hasło Hasło wprowadzonej nazwy użytkownika Plik klucza prywatnego Plik klucza prywatnego utworzony na potrzeby połączenia SSH Hasło Hasło używane z kluczem prywatnym wybranym powyżej Nie można kliknąć przycisku Połącz , dopóki wszystkie wymagane pola nie zostaną ukończone, a port zostanie ustawiony na liczbę całkowitą z zakresu od 1 do 65535.
Do uwierzytelniania można użyć hasła lub pliku klucza i hasła. Pliki kluczy są bezpieczniejsze niż nazwa użytkownika/hasło. Jeśli masz już parę kluczy, możesz użyć jej ponownie.
Wersje programu Visual Studio przed 17.10 obsługują klucze Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA) i Digital signature algorithm (DSA) dla połączeń zdalnych. Ze względu na obawy dotyczące zabezpieczeń klucze RSA i DSA nie są już obsługiwane w programie VS 17.10 i nowszych wersjach. Obecnie obsługiwane są tylko klucze EC. Aby utworzyć parę kluczy zgodną z menedżerem połączeń, użyj polecenia :
ssh-keygen -m pem -t ecdsa -f <key-name>
Uwaga
Jeśli używasz
ssh-keygen
polecenia do utworzenia klucza prywatnego, musisz określić przełącznik-m pem
, lub klucz nie zostanie zaakceptowany przez program Visual Studio. Jeśli klucz prywatny zaczyna się od-----BEGIN OPENSSH PRIVATE KEY-----
, musisz przekonwertować go nassh-keygen -p -f <FILE> -m pem
.Wybierz przycisk Połącz, aby spróbować nawiązać połączenie z komputerem zdalnym.
Jeśli połączenie powiedzie się, program Visual Studio skonfiguruje funkcję IntelliSense do korzystania z nagłówków zdalnych. Aby uzyskać więcej informacji, zobacz IntelliSense dla nagłówków w systemach zdalnych.
Jeśli połączenie nie powiedzie się, zostanie wyświetlony pasek informacji o błędzie, a pola, które może być konieczne zmiany, są opisane na czerwono.
Jeśli używasz plików kluczy do uwierzytelniania, upewnij się, że serwer SSH maszyny docelowej jest uruchomiony i skonfigurowany prawidłowo.
Jeśli masz problemy z nawiązywaniem połączenia z usługą WSL w systemie
localhost
, zobacz Rozwiązywanie problemów z połączeniem WSLlocalhost
.
Weryfikacja klucza hosta
W programie Visual Studio w wersji 16.10 lub nowszej zostanie wyświetlony monit o zweryfikowanie odcisku palca klucza hosta serwera za każdym razem, gdy program Visual Studio łączy się z systemem zdalnym po raz pierwszy. Możesz zapoznać się z tym procesem, jeśli wcześniej użyto klienta wiersza polecenia openSSH lub programu PuTTY. Odcisk palca identyfikuje serwer. Program Visual Studio używa odcisku palca, aby upewnić się, że nawiązuje połączenie z zamierzonym i zaufanym serwerem.
Po pierwszym ustanowieniu nowego połączenia zdalnego program Visual Studio zostanie poproszony o zaakceptowanie lub odmowę odcisku palca klucza hosta przedstawionego przez serwer. Lub w dowolnym momencie zmiany w buforowanym odcisku palca. Możesz również zweryfikować odcisk palca na żądanie: wybierz połączenie w Menedżer połączeń i wybierz pozycję Weryfikuj.
Jeśli uaktualnisz program Visual Studio 16.10 lub nowszy ze starszej wersji, traktuje wszystkie istniejące połączenia zdalne jako nowe połączenia. Zostanie wyświetlony monit o zaakceptowanie najpierw odcisku palca klucza hosta. Następnie program Visual Studio ustanawia połączenie i buforuje zaakceptowane odciski palca.
Możesz również zaktualizować połączenia zdalne przy ConnectionManager.exe
użyciu argumentu update
.
Obsługiwane algorytmy SSH
Począwszy od programu Visual Studio w wersji 16.9, obsługa starszych, niezabezpieczonych algorytmów SSH używanych do szyfrowania danych i kluczy wymiany jest usuwana. Obsługiwane są tylko następujące algorytmy. Są one obsługiwane zarówno w przypadku komunikacji między klientem a serwerem a klientem SSH:
Typ algorytmu | Obsługiwane algorytmy |
---|---|
Szyfrowanie | aes128-cbc aes128-ctr aes192-cbc aes192-ctr aes256-cbc aes256-ctr |
HMAC | hmac-sha2-256 hmac-sha2-512 |
Wymiana kluczy | diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 |
Klucz hosta | ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 |
Konfigurowanie serwera SSH
Po pierwsze, trochę tła. Nie można wybrać algorytmu SSH do użycia w programie Visual Studio. Zamiast tego algorytm jest określany podczas początkowego uzgadniania z serwerem SSH. Każda strona (klient i serwer) udostępnia listę algorytmów, które obsługuje, a następnie wybierany jest pierwszy algorytm wspólny dla obu tych typów. Połączenie powiedzie się tak długo, jak istnieje co najmniej jeden algorytm wspólny między programem Visual Studio i serwerem do szyfrowania, HMAC, wymiany kluczy itd.
Plik konfiguracji Open SSH (sshd_config
) nie konfiguruje algorytmu, który ma być używany domyślnie. Serwer SSH powinien używać bezpiecznych wartości domyślnych, jeśli nie określono żadnych algorytmów. Te wartości domyślne zależą od wersji i dostawcy serwera SSH. Jeśli program Visual Studio nie obsługuje tych wartości domyślnych, prawdopodobnie zostanie wyświetlony błąd, taki jak: "Nie można nawiązać połączenia z systemem zdalnym. Nie znaleziono wspólnego klienta z serwerem algorytmu HMAC. Błąd może również pojawić się, jeśli serwer SSH jest skonfigurowany do używania algorytmów, których program Visual Studio nie obsługuje.
Domyślny serwer SSH w większości nowoczesnych dystrybucji systemu Linux powinien działać z programem Visual Studio. Możesz jednak uruchomić starszy serwer SSH skonfigurowany do używania starszych, niezabezpieczonych algorytmów. W poniższym przykładzie wyjaśniono, jak zaktualizować do bardziej bezpiecznych wersji.
W poniższym przykładzie serwer SSH używa niezabezpieczonego hmac-sha1
algorytmu, którego program Visual Studio 16.9 nie obsługuje. Jeśli serwer SSH używa protokołu OpenSSH, możesz edytować /etc/ssh/sshd_config
plik, jak pokazano poniżej, aby włączyć bezpieczniejsze algorytmy. W przypadku innych serwerów SSH zapoznaj się z dokumentacją serwera, aby dowiedzieć się, jak je skonfigurować.
Najpierw sprawdź, czy zestaw algorytmów używanych przez serwer obejmuje algorytmy obsługiwane przez program Visual Studio. Uruchom następujące polecenie na maszynie zdalnej, aby wyświetlić listę algorytmów obsługiwanych przez serwer:
ssh -Q cipher; ssh -Q mac; ssh -Q kex; ssh -Q key
Polecenie generuje dane wyjściowe, takie jak:
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
...
ecdsa-sha2-nistp521-cert-v01@openssh.com
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com
Dane wyjściowe zawierają listę wszystkich algorytmów szyfrowania, HMAC, wymiany kluczy i klucza hosta obsługiwanych przez serwer SSH. Jeśli lista nie zawiera algorytmów obsługiwanych przez program Visual Studio, przed kontynuowaniem uaktualnij serwer SSH.
Algorytmy obsługiwane przez program Visual Studio można włączyć, edytując /etc/ssh/sshd_config
je na maszynie zdalnej. W poniższych przykładach pokazano, jak dodać do tego pliku konfiguracji różne typy algorytmów.
Te przykłady można dodawać w dowolnym miejscu w pliku /etc/ssh/sshd_config
. Upewnij się, że są one na własnych wierszach.
Po edycji pliku uruchom ponownie serwer SSH (sudo service ssh restart
w systemie Ubuntu) i spróbuj ponownie nawiązać połączenie z programu Visual Studio.
Przykład szyfrowania
Dodawać: Ciphers <algorithms to enable>
Na przykład: Ciphers aes128-cbc,aes256-cbc
.
Przykład HMAC
Dodawać: MACs <algorithms to enable>
Na przykład: MACs hmac-sha2-256,hmac-sha2-512
.
Przykład wymiany kluczy
Dodawać: KexAlgorithms <algorithms to enable>
Na przykład: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384
.
Przykład klucza hosta
Dodawać: HostKeyAlgorithms <algorithms to enable>
Na przykład: HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384
.
Rejestrowanie połączeń zdalnych
Możesz włączyć rejestrowanie, aby ułatwić rozwiązywanie problemów z połączeniem. Na pasku menu wybierz pozycję Narzędzia > Opcje. W oknie dialogowym Opcje wybierz pozycję Rejestrowanie międzyplatformowe>:
Opcje są otwarte dla rejestrowania > Menedżer połączeń > międzyplatformowych. Włącz rejestrowanie jest sprawdzane, sprawdzany jest dziennik do pliku, katalog logfile jest ustawiany w folderze documents i loguje się do okienka "Rejestrowanie międzyplatformowe" w oknie danych wyjściowych.
Dzienniki obejmują połączenia, wszystkie polecenia wysyłane do maszyny zdalnej (ich tekst, kod zakończenia i czas wykonywania) oraz wszystkie dane wyjściowe z programu Visual Studio do powłoki. Rejestrowanie działa w przypadku dowolnego międzyplatformowego projektu CMake lub projektu systemu Linux opartego na programie MSBuild w programie Visual Studio.
Możesz skonfigurować dane wyjściowe, aby przejść do pliku lub do okienka Rejestrowanie międzyplatformowe w oknie Dane wyjściowe. W przypadku projektów systemu Linux opartych na programie MSBuild polecenia MSBuild wysyłane do maszyny zdalnej nie są kierowane do okna danych wyjściowych, ponieważ są emitowane poza procesem. Zamiast tego są one rejestrowane w pliku z prefiksem "msbuild_".
Narzędzie wiersza polecenia dla Menedżer połączeń
Program Visual Studio 2019 w wersji 16.5 lub nowszej: ConnectionManager.exe
to narzędzie wiersza polecenia do zarządzania połączeniami programowania zdalnego poza programem Visual Studio. Jest to przydatne w przypadku zadań, takich jak aprowizowanie nowej maszyny deweloperskiej. Możesz też użyć go do skonfigurowania programu Visual Studio na potrzeby ciągłej integracji. Aby zapoznać się z przykładami i pełnym odwołaniem do polecenia ConnectionManager, zobacz ConnectionManager reference (Dokumentacja menedżera połączeń).
Przekazywanie portów TCP
Polecenie rsync
jest używane zarówno przez projekty systemu Linux oparte na programie MSBuild, jak i projekty CMake do kopiowania nagłówków z systemu zdalnego do systemu Windows do użycia przez funkcję IntelliSense. Jeśli nie możesz włączyć przekazywania portów TCP, wyłącz automatyczne pobieranie nagłówków zdalnych. Aby go wyłączyć, użyj opcji > narzędzi > międzyplatformowych > Menedżer połączeń > Menedżer funkcji IntelliSense nagłówków zdalnych. Jeśli system zdalny nie ma włączonego przekazywania portów TCP, ten błąd pojawia się po rozpoczęciu pobierania nagłówków zdalnych dla funkcji IntelliSense:
rsync
Jest również używany przez obsługę narzędzia CMake programu Visual Studio do kopiowania plików źródłowych do systemu zdalnego. Jeśli nie możesz włączyć przekazywania portów TCP, możesz użyć sftp
jako metody zdalnych źródeł kopiowania. sftp
jest często wolniejsza niż rsync
, ale nie ma zależności od przekierowywania portów TCP. Możesz zarządzać metodą zdalnych źródeł kopiowania za remoteCopySourcesMethod
pomocą właściwości w Edytorze ustawień narzędzia CMake. Jeśli przekazywanie portów TCP jest wyłączone w systemie zdalnym, w oknie danych wyjściowych narzędzia CMake pojawia się błąd przy pierwszym wywołaniu rsync
.
Okno danych wyjściowych zawiera następujące komunikaty: Sprawdź, czy na serwerze włączono przekazywanie TCP, rsync: nie widzi powitania serwera, błąd rsync: błąd podczas uruchamiania protokołu client-server (kod 5) w pliku main.c(1675) [sender=3.1.3], nie można otworzyć kanału SSH.
gdbserver
może służyć do debugowania na urządzeniach osadzonych. Jeśli nie możesz włączyć przekazywania portów TCP, musisz użyć go gdb
dla wszystkich scenariuszy zdalnego debugowania. gdb
Jest używany domyślnie podczas debugowania projektów w systemie zdalnym.
Obsługa systemu Linux w programie Visual Studio ma zależność od przekierowywania portów TCP. Zarówno rsync
, jak i gdbserver
ma to wpływ, jeśli przekazywanie portów TCP jest wyłączone w systemie zdalnym. Jeśli ta zależność ma wpływ na Ciebie, zagłosuj na ten bilet sugestii w społeczności deweloperów.
Nawiązywanie połączenia z usługą WSL
W programie Visual Studio 2017 użyjesz tych samych kroków, aby nawiązać połączenie z usługą WSL, która jest używana na potrzeby zdalnej maszyny z systemem Linux. Użyj jako localhost
nazwy hosta.
Począwszy od programu Visual Studio 2019 w wersji 16.1, program Visual Studio ma natywną obsługę używania języka C++ z Podsystem Windows dla systemu Linux (WSL). Oznacza to, że można kompilować i debugować lokalną instalację WSL bezpośrednio. Nie trzeba już dodawać połączenia zdalnego ani konfigurować protokołu SSH. Szczegółowe informacje na temat sposobu instalowania programu WSL można znaleźć tutaj.
Aby skonfigurować instalację WSL do pracy z programem Visual Studio, potrzebne są następujące narzędzia: gcc
lub clang
, gdb
, make
ninja-build
(wymagane tylko dla projektów CMake przy użyciu programu Visual Studio 2019 w wersji 16.6 lub nowszej), rsync
i zip
. Można je zainstalować w dystrybucjach, które używają apt
za pomocą tego polecenia, co powoduje również zainstalowanie kompilatora g++:
sudo apt install g++ gdb make ninja-build rsync zip
Rozwiązywanie problemów z połączeniem WSL localhost
Podczas nawiązywania połączenia z usługą Podsystem Windows dla systemu Linux (WSL) w systemie localhost
może wystąpić konflikt z klientem systemu Windows ssh
na porcie 22. W programie WSL zmień port, który ssh
oczekuje żądań z do 23 w pliku /etc/ssh/sshd_config
:
Port 23
Jeśli nawiązujesz połączenie przy użyciu hasła, upewnij się, że w pliku ustawiono następujące ustawienia:/etc/ssh/sshd_config
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
Po wprowadzeniu tych zmian uruchom ponownie serwer SSH (sudo service ssh restart
w systemie Ubuntu).
Następnie ponów próbę nawiązania połączenia z localhost
portem 23.
Aby uzyskać więcej informacji, zobacz Pobieranie, instalowanie i konfigurowanie obciążenia systemu Linux.
Aby skonfigurować projekt MSBuild dla programu WSL, zobacz Konfigurowanie projektu systemu Linux. Aby skonfigurować projekt CMake dla programu WSL, zobacz Konfigurowanie projektu CMake systemu Linux. Aby wykonać instrukcje krok po kroku dotyczące tworzenia prostej aplikacji konsolowej za pomocą programu WSL, zapoznaj się z tym wpisem w blogu wprowadzającym w języku C++ z programem Visual Studio 2019 i Podsystem Windows dla systemu Linux (WSL).
Zobacz też
Konfigurowanie projektu systemu Linux
Konfigurowanie projektu CMake systemu Linux
Wdrażanie, uruchamianie i debugowanie projektu systemu Linux
Konfigurowanie sesji debugowania narzędzia CMake