Połączenie do docelowego systemu 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 Połą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.

  1. W systemie Linux zainstaluj i uruchom serwer OpenSSH:

    sudo apt install openssh-server
    sudo service ssh start
    
  2. 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

  1. W programie Visual Studio wybierz pozycję Narzędzia > Opcje na pasku menu, aby otworzyć okno dialogowe Opcje . Następnie wybierz pozycję Menedżer Połączenie ion dla wielu platform > , aby otworzyć okno dialogowe menedżera Połączenie ion.

    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żera Połączenie ion.

  2. W oknie dialogowym Menedżer Połączenie ion wybierz przycisk Dodaj, aby dodać nowe połączenie.

    Zrzut ekranu przedstawiający okienko opcji programu Visual Studio.

    W okienku opcji wybrano pozycję CrossPlatform > Menedżera > Połączenie ion języka C++ i wyróżniono przycisk Dodaj.

    Aby edytować istniejące połączenie, wybierz pozycję Edytuj. W obu scenariuszach zostanie wyświetlone okno Połączenie z systemem zdalnym.

    Zrzut ekranu przedstawiający okno Połączenie programu Visual Studio do systemu zdalnego.

    W oknie Połą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".

  3. 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łączenie, 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. W przypadku wielu scenariuszy programistycznych uwierzytelnianie haseł jest wystarczające, ale pliki kluczy są bezpieczniejsze. Jeśli masz już parę kluczy, możesz użyć jej ponownie.

    Wersje programu Visual Studio przed 17.10 obsługują klucze EC, RSA i 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 na ssh-keygen -p -f <FILE> -m pem.

  4. Wybierz przycisk Połączenie, 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.

    Zrzut ekranu przedstawiający okno Połączenie programu Visual Studio do systemu zdalnego. Nazwa hosta i pola portów są opisane na czerwono, aby wskazać nieprawidłowe wpisy.

    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żerze Połączenie ion 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

Dodaj: Ciphers <algorithms to enable>
Na przykład: Ciphers aes128-cbc,aes256-cbc.

Przykład HMAC

Dodaj: MACs <algorithms to enable>
Na przykład: MACs hmac-sha2-256,hmac-sha2-512.

Przykład wymiany kluczy

Dodaj: KexAlgorithms <algorithms to enable>
Na przykład: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384.

Przykład klucza hosta

Dodaj: 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>:

Zrzut ekranu przedstawiający ekran opcji programu Visual Studio.

Opcje są otwarte dla menedżera > Połączenie platformy > rejestrowania. 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żera Połączenie ion

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. Przykłady i pełne odwołanie do polecenia Połączenie ionManager można znaleźć w dokumentacji Połączenie ionManager.

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 > Połączenie ion Manager nagłówków zdalnych IntelliSense Manager>. 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:

Zrzut ekranu przedstawiający komunikat o błędzie programu Visual Studio informujący, że nie można otworzyć kanału SSH. Podano ścieżkę do pliku dziennika.

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 Ustawienia 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.

Zrzut ekranu przedstawiający okno danych wyjściowych programu Visual Studio z komunikatem o błędzie 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.

Połączenie do programu 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 localhostnazwy 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, makeninja-build (wymagane tylko dla projektów CMake przy użyciu programu Visual Studio 2019 w wersji 16.6 lub nowszej), rsynci 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 localhostmoże wystąpić konflikt z klientem systemu Windows ssh na porcie 22. W programie WSL zmień port, który sshoczekuje żą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