Подключение к целевой системе Linux из Visual Studio

Поддержка Linux реализована в Visual Studio версии 2017 и выше.

Вы можете настроить проект Linux для использования на удаленном компьютере или в подсистеме Windows для Linux (WSL). Для работы на удаленных компьютерах и в WSL необходимо настроить в Visual Studio 2017 удаленное подключение к ним.

Вы можете настроить проект Linux для использования на удаленном компьютере или в подсистеме Windows для Linux (WSL). Для работы на удаленном компьютере необходимо настроить в Visual Studio удаленное подключение к нему. Сведения о подключении к WSL см. в разделе Подключение к WSL.

При использовании удаленного подключения Visual Studio создает проекты Linux C++ на удаленном компьютере. Это не имеет значения, если это физическая машина, виртуальная машина в облаке или WSL. Для сборки проекта Visual Studio копирует исходный код на удаленный компьютер Linux. Затем код компилируется в соответствии с параметрами Visual Studio.

Примечание.

Начиная с Visual Studio 2019 версии 16.5, Visual Studio также поддерживает безопасные совместимые с FIPS 140-2 криптографические подключения к системам Linux для удаленной разработки. Чтобы использовать FIPS-совместимое подключение, выполните действия, описанные в статье Set up FIPS-compliant secure remote Linux development (Настройка совместимой с FIPS безопасной удаленной разработки для Linux).

Настройка сервера SSH в удаленной системе

Если ssh еще не настроен и не запущен в вашей системе Linux, выполните следующие действия по его установке. В примерах в этой статье используется Ubuntu 18.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 не было настроено ранее, это диалоговое окно откроется при первом создании проекта.

  2. В диалоговом окне диспетчера подключений нажмите кнопку Добавить, чтобы добавить новое подключение.

    Снимок экрана: панель параметров Visual Studio.

    В области параметров выбрана > диспетчер подключений CrossPlatform > C++ и выделена кнопка "Добавить".

    Чтобы изменить существующее подключение, нажмите кнопку "Изменить". В любом сценарии отображается окно Подключение к удаленной системе.

    Снимок экрана: окно Visual Studio Connect к удаленной системе.

    В окне "Подключение к удаленной системе" есть поля для имени узла, порта, имени пользователя, типа проверки подлинности и пароля. Порт имеет значение 22. Для типа проверки подлинности задано значение Password.

  3. Введите следующие данные:

    Формат ввода Description
    Host Name Имя или IP-адрес целевого устройства
    порт. Порт, в котором работает служба SSH, обычно 22
    Имя пользователя Пользователь для проверки подлинности
    Тип проверки подлинности Поддерживается и пароль, и закрытый ключ
    Пароль Пароль для указанного имени пользователя
    Файл закрытого ключа Закрытый ключ, созданный для подключения по SSH
    Парольная фраза Парольная фраза, используемая с закрытым ключом, выбранным выше

    Вы не можете нажать кнопку "Подключить ", пока не будут завершены все обязательные поля, а порт имеет целое число от 1 до 65535.

    Вы можете использовать для проверки подлинности пароль или файл ключа с парольной фразой. Файлы ключей являются более безопасными, чем имя пользователя или пароль. Если у вас уже есть пара ключей, ее можно использовать повторно.

    Версии Visual Studio до 17.10 поддерживают ключи Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA) и алгоритм цифровых подписей (DSA) для удаленных подключений. Из-за проблем безопасности ключи RSA и DSA больше не поддерживаются в VS 17.10 и более поздних версиях. В настоящее время поддерживаются только ключи 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 Connect к удаленной системе. Поля имени узла и порта выделены красным цветом, чтобы указать неправильные записи.

    Если вы используете для аутентификации файлы ключей, убедитесь, что сервер SSH на целевом компьютере работает и настроен правильно.

    Если у вас возникли проблемы с подключением к WSL на localhost, см. раздел Устранение проблем с подключением WSL на localhost.

Проверка ключа узла

В Visual Studio версии 16.10 или более поздней версии запрашивается проверка отпечаток ключа узла сервера при первом подключении Visual Studio к удаленной системе. Вы можете ознакомиться с этим процессом, если вы использовали клиент командной строки OpenSSH или PuTTY раньше. Отпечаток определяет сервер. Visual Studio использует отпечаток, чтобы убедиться, что подключение выполняется к предполагаемому и доверенному серверу.

Когда Visual Studio впервые устанавливает новое удаленное подключение, вам будет предложено принять или запретить отпечаток ключа узла, представленного сервером. Или в любое другое время, когда кэшированный отпечаток меняется. Можно также проверить отпечаток по запросу, выбрав подключение в диспетчере подключений и нажав Проверить.

При обновлении Visual Studio с более ранней версии до 16.10 или более поздней версии все существующие удаленные подключения будут рассматриваться как новые. Сначала вам будет предложено принять отпечаток ключа узла. После этого Visual Studio устанавливает соединение и кэширует принятый отпечаток.

Также можно обновить удаленные подключения из ConnectionManager.exe с помощью аргумента update.

Поддерживаемые алгоритмы SSH

Начиная с Visual Studio версии 16.9 поддержка старых небезопасных алгоритмов SSH, используемых для шифрования данных и ключей обмена, удаляется. Поддерживаются только следующие алгоритмы. Они поддерживают обмен данными как в направлении "клиент-сервер", так и в направлении "сервер-клиент" по протоколу SSH:

Тип алгоритма Поддерживаемые алгоритмы
Шифрование aes128-cbc
aes128-ctr
aes192-cbc
aes192-ctr
aes256-cbc
aes256-ctr
Код проверки подлинности сообщений с помощью хэш-функций 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

Сначала немного теории. Вам не удастся выбрать алгоритм SSH для использования в Visual Studio. Алгоритм определяется во время первоначального подтверждения с помощью сервера SSH. Каждая сторона (клиент и сервер) предоставляет список поддерживаемых алгоритмов, а затем выбирается первый алгоритм, общий для обоих. Соединение будет работать, если имеется хотя бы один алгоритм, общий для Visual Studio и сервера для шифрования, HMAC, обмена ключами и т. д.

Открытый файл конфигурации SSH (sshd_config) не определяет, какой алгоритм использовать по умолчанию. Если алгоритмы не указаны, сервер SSH должен использовать безопасные значения по умолчанию. Эти значения по умолчанию зависят от версии и поставщика сервера SSH. Если Visual Studio не поддерживает эти значения по умолчанию, скорее всего, появится сообщение об ошибке: "Не удалось подключиться к удаленной системе. Не найден алгоритм HMAC, общий для клиента и сервера". Эта ошибка также может возникать, если сервер SSH настроен для использования алгоритмов, которые Visual Studio не поддерживает.

В большинстве современных дистрибутивов Linux сервер SSH должен работать в среде с Visual Studio. Возможно, вы используете более старый сервер SSH, который настроен на использование старых и незащищенных алгоритмов. В следующем примере показано, как выполнить обновление до более безопасных версий.

В следующем примере сервер SSH использует небезопасный hmac-sha1 алгоритм, который Visual Studio 16.9 не поддерживает. Если сервер 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

Перечисляются все алгоритмы шифрования, HMAC, обмена ключами и алгоритмы ключей узла, поддерживаемые сервером SSH. Если список не включает алгоритмы, поддерживаемые Visual Studio, перед продолжением обновите сервер SSH.

Включить алгоритмы, поддерживаемые Visual Studio, можно путем изменения /etc/ssh/sshd_config на удаленном компьютере. В следующих примерах показано, как добавить различные типы алгоритмов в этот файл конфигурации.

Эти примеры можно добавить в любое место в /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.

Эти параметры открыты для кроссплатформенного > диспетчер подключений > ведения журнала. Включение ведения журнала проверяется, выполняется проверка журнала в файл, каталог logfile устанавливается в папку документов и регистрируется в области "Кроссплатформенное ведение журнала" в окне вывода.

Журналы сохраняют все попытки подключения, все отправленные на удаленный компьютер команды (строка команды, код завершения и время выполнения), а также все данные, выводимые из Visual Studio в оболочку. Ведение журналов поддерживается в Visual Studio для любого кроссплатформенного проекта CMake или проекта Linux на основе MSBuild.

Вы можете настроить вывод данных в файл или на панель кроссплатформенного ведения журнала в окне вывода. В проектах Linux на основе MSBuild команды MSBuild, передаваемые на удаленный компьютер, не отправляются в окно вывода, так как они порождаются вне основного процесса. Такие команды сохраняются в отдельный файл с префиксом "msbuild_".

Служебная программа командной строки для диспетчера подключений

Visual Studio 2019 версии 16.5 или более поздних версий: ConnectionManager.exe — это программа командной строки для управления подключениями удаленной разработки вне Visual Studio. Ее удобно использовать для выполнения таких задач, как подготовка нового компьютера разработчика. Кроме того, с ее помощью можно настроить Visual Studio для непрерывной интеграции. Примеры и полные справочные сведения по командам ConnectionManager см. в статье Справка по ConnectionManager.

Перенаправление TCP-портов

С помощью команды rsync в проектах Linux на основе MSBuild и проектах CMake можно копировать заголовки, которые будут использоваться в IntelliSense, из удаленной системы в Windows. Если вы не можете включить перенаправление TCP-портов, отключите автоматическое скачивание удаленных заголовков. Для этого последовательно выберите Сервис > Параметры > Кроссплатформенный > Диспетчер подключений > Диспетчер удаленных заголовков IntelliSense. Если в удаленной системе не включена переадресация TCP-порта, эта ошибка возникает при загрузке удаленных заголовков для IntelliSense:

Снимок экрана: сообщение об ошибке Visual Studio о том, что канал SSH не был открыт. Предоставляется путь к файлу журнала.

Кроме того, rsync используется при реализации поддержки CMake в Visual Studio для копирования исходных файлов в удаленную систему. Если вы не можете включить перенаправление TCP-портов, используйте sftp в качестве метода копирования источников из удаленного расположения. sftp обычно работает медленнее, чем rsync, но не зависит от перенаправления TCP-портов. Управлять методом копирования источников из удаленного расположения можно с помощью свойства remoteCopySourcesMethod в редакторе параметров CMake. Если переадресация TCP-портов отключена в удаленной системе, в окне вывода CMake появится ошибка при первом вызове rsync.

Снимок экрана: окно вывода Visual Studio с сообщением об ошибке Rsync.

В окне вывода содержатся следующие сообщения: убедитесь, что на сервере включена пересылка TCP, rsync: не видела приветствия сервера, ошибка rsync: ошибка запуска протокола клиентского сервера (код 5) в main.c(1675) [sender=3.1.3], канал SSH не удалось открыть.

С помощью gdbserver можно выполнять отладку на встроенных устройствах. Если вы не можете включить перенаправление TCP-портов, необходимо использовать gdb для всех сценариев удаленной отладки. gdb используется по умолчанию при отладке проектов в удаленной системе.

Поддержка Linux в Visual Studio зависит от перенаправления TCP-портов. Если в удаленной системе отключено перенаправление TCP-портов, это повлияет на rsync и gdbserver. Если эта зависимость влияет на вас, вы можете оставить свой запрос с предложением на сайте Сообщества разработчиков.

Подключение к WSL

В Visual Studio 2017 подключение к WSL выполняется так же, как к удаленному компьютеру Linux. Используйте localhost для имени узла.

Начиная с Visual Studio 2019 версии 16.1, в Visual Studio добавлена встроенная поддержка для использования C++ с подсистемой Windows для Linux (WSL). Это значит, что сборка и отладка локальной установки WSL выполняются напрямую. Больше не нужно добавлять удаленное подключение или настраивать SSH. Дополнительные сведения об установке WSL можно найти здесь.

Чтобы настроить установку WSL для работы с Visual Studio, потребуется установить следующие средства: gcc илиclang, gdb, make, ninja-build(требуется только для проектов CMake с использованием Visual Studio 2019 версии 16.6 и более поздней), rsync и zip. Их можно установить на дистрибутивах, использующих apt, с помощью этой команды, которая также устанавливает компилятор g++:

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

Устранение проблем с подключением WSL на localhost

При подключении к подсистеме Windows для Linux (WSL) на localhost может возникнуть конфликт с клиентом Windows ssh на порту 22. В 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).

Затем повторите попытку подключения к localhost через порт 23.

Ознакомьтесь с дополнительными сведениями о скачивании, установке и настройке рабочей нагрузки для Linux.

Сведения о настройке проекта MSBuild для WSL см. в статье Настройка проекта Linux. Сведения о настройке проекта CMake для WSL см. в статье Настройка проекта Linux CMake. Пошаговые инструкции по созданию простого консольного приложения с помощью WSL приводятся в ознакомительной публикации блога о C++ в Visual Studio 2019 и подсистеме Windows для Linux (WSL).

См. также

Настройка проекта Linux
Настройка проекта Linux CMake
Развертывание, запуск и отладка проекта Linux
Настройка сеансов отладки CMake