Подключение к целевой системе 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 следует придерживаться одинаковых инструкций.
В системе Linux установите и запустите сервер OpenSSH.
sudo apt install openssh-server sudo service ssh start
Если вы хотите, чтобы сервер SSH запускал автоматически при загрузке системы, включите его с помощью systemctl:
sudo systemctl enable ssh
Настройка удаленного подключения
Чтобы в Visual Studio открыть диалоговое окно Параметры, в строке меню выберите Сервис > Параметры. Затем выберите Кроссплатформенный > Диспетчер подключений, чтобы открыть диалоговое окно диспетчера подключений.
Если подключение в Visual Studio не было настроено ранее, это диалоговое окно откроется при первом создании проекта.
В диалоговом окне диспетчера подключений нажмите кнопку Добавить, чтобы добавить новое подключение.
В области параметров выбрана > диспетчер подключений CrossPlatform > C++ и выделена кнопка "Добавить".
Чтобы изменить существующее подключение, нажмите кнопку "Изменить". В любом сценарии отображается окно Подключение к удаленной системе.
В окне "Подключение к удаленной системе" есть поля для имени узла, порта, имени пользователя, типа проверки подлинности и пароля. Порт имеет значение 22. Для типа проверки подлинности задано значение Password.
Введите следующие данные:
Формат ввода 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
помощью.Нажмите кнопку Подключить, чтобы попытаться подключиться к удаленному компьютеру.
Если соединение будет установлено успешно, Visual Studio настроит IntelliSense для использования удаленных заголовков. Подробнее см. раздел об использовании IntelliSense для заголовков в удаленных системах.
Если подключение завершается ошибкой, появится информационная панель с сведениями об ошибке, а поля, которые могут потребоваться изменить, выделены красным цветом.
Если вы используете для аутентификации файлы ключей, убедитесь, что сервер 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
...
[email protected]
[email protected]
Перечисляются все алгоритмы шифрования, 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
Ведение журнала для удаленных подключений
Вы можете включить ведение журнала для устранения проблем с подключением. В строке меню выберите Сервис > Параметры. В диалоговом окне Параметры выберите Кроссплатформенный > Ведение журнала:
Эти параметры открыты для кроссплатформенного > диспетчер подключений > ведения журнала. Включение ведения журнала проверяется, выполняется проверка журнала в файл, каталог 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:
Кроме того, rsync
используется при реализации поддержки CMake в Visual Studio для копирования исходных файлов в удаленную систему. Если вы не можете включить перенаправление TCP-портов, используйте sftp
в качестве метода копирования источников из удаленного расположения. sftp
обычно работает медленнее, чем rsync
, но не зависит от перенаправления TCP-портов. Управлять методом копирования источников из удаленного расположения можно с помощью свойства remoteCopySourcesMethod
в редакторе параметров CMake. Если переадресация TCP-портов отключена в удаленной системе, в окне вывода CMake появится ошибка при первом вызове 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