Как создать ключ для авторизации по SSH и добавить его на сервер?
![]()
На клиентской стороне должен быть установлен пакет ssh (openssh). На серверах FirstVDS с шаблонами по умолчанию необходимое ПО уже установлено.
Для ОС CentOS, AlmaLinux или RockyLinux выполните команду:
# yum -y install openssh-server openssh-clients
Для ОС Debian или Ubuntu выполните команду:
# apt -y install openssh-server
Дальнейшая инструкция будет одинаковая для всех ОС.
На клиентском компьютере в командной строке выполните команду генерации ключей:
# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Введите путь файла, в который будут помещены ключи. Каталог по умолчанию указан в скобках, в примере /домашний_каталог/.ssh/id_rsa . Если хотите оставить расположение по умолчанию, нажмите Enter.
Пароль (passphrase) используется для ограничения доступа к закрытому ключу. Пароль усложнит использование ключа третьими лицами в случае утраты. Если не хотите использовать секретную фразу, нажмите Enter без заполнения строки.
Успешно сгенерировав пару ключей, вы увидите уведомление:
Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:JPDzeSan06C9+osd+sKXWP0RmPk4UbSESaTvYn0aXVk root@test-server1.com The key's randomart image is: +---[RSA 3072]----+ |. oo+o | | o .o. | | + o =. E | | = o= . o | | S.=+ .o | | o.@+.o. | | ..oB.=oo. | | +=o= +. | | +**.. | +----[SHA256]-----+
По умолчанию в современных ОС генерация ключей происходит по умолчанию с такими настройками: тип аутентификации — RSA, число бит в ключе — 2048 или 3072.
Рекомендуем позаботится о безопасности ключей. В первую очередь обязательно необходимо задавать пароль (passphrase), который не должен быть простым. С помощью параметра -a можно увеличить время проверки пароля ключа, чтобы усложнить взлом методом грубого перебора (в случае, если ключ будет утерян, у вас будет больше времени на смену ключа на сервере).
Будьте внимательны, слишком большое значение приведет к тому, что вам придется ждать каждый раз при входе на сервер по ключу. Значение по умолчанию — 3 секунды, можно задать 15 секунд. С помощью параметра -b можно задать число бит в ключе — 4096. Получаем такую команду:
# ssh-keygen -b 4096 -a 15
Выбираем директорию, вводим пароль и видим ключ RSA 4096.
Открытый ключ хранится в файле /домашний_каталог/.ssh/id_rsa.pub , закрытый — /домашний_каталог/.ssh/id_rsa .
Никогда и никому не передавайте, не показывайте свой закрытый ключ и не выкладывайте его на публично доступные сервисы (в т.ч. GitLab, GitHub и пр.).

Скопируйте открытый ключ на сервер в файл /домашний_каталог/.ssh/authorized_keys . Одной строкой:
cat ~/.ssh/id_rsa.pub | ssh root@ip-адрес-сервера 'cat >> ~/.ssh/authorized_keys'
Или откройте этот файл на сервере редактором vi и вставьте строку с открытым ключом после ssh-rsa .

Ещё один способ скопировать ключ в authorized_keys — команда echo , которая помещает строку в конец файла.
echo ssh-rsa строка-публичного-ключа >> /root/.ssh/authorized_keys

Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.
Создание SSH-ключей на Windows с PuTTYgen
Если вы используете ОС Windows, то подключиться по SSH к вашему (Linux) серверу можно через PuTTY или OpenSSH . Генерация ключей в этом случае выполняется также при помощи этих программ. В примере мы используем клиент PuTTY.
Запустите приложение PuTTYgen , которое устанавливается вместе с PuTTY.

Выберите тип ключа SSH2-RSA и нажмите Generate .

В процессе генерации ключей несколько раз произвольно проведите мышкой по экрану приложения для создания случайных величин, используемых для ключей.

После завершения создания ключей открытый ключ выводится на экран, закрытый хранится в памяти приложения. Чтобы сохранить эти ключи нажмите Save public key и Save private key . Укажите расположение файлов с ключами.

При сохранении закрытого ключа, если не заполнено поле Key passphrase , появится запрос «Хотите ли вы сохранить ключ без секретной фразы?»

Теперь открытый ключ необходимо скопировать на сервер в файл authorized_keys . Используйте WinSCP или другой клиент для работы с файлами на удалённом Linux-сервере. Вы можете скопировать файл с открытым ключом целиком на сервер, чтоб его копия хранилась в папке .ssh

Откройте файл authorized_keys через WinSCP и файл, в который вы сохранили открытый ключ (public), на локальном компьютере текстовым редактором. Скопируйте значение ключа, сохраните и закройте файл в WinSCP.

При запуске PuTTY укажите путь к закрытому ключу на локальном компьютере. Для этого во вкладке Connections → Auth выберите необходимый путь.

Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.
Отключение аутентификации по паролю
Подключитесь к серверу по SSH, используя пароль, и откройте файл sshd_config для редактирования (например, с помощью текстового редактора Vi).
# vi /etc/ssh/sshd_config
Убедитесь, что указан правильный путь к открытым ключам SSH, поставьте значение параметра PasswordAuthentication no .

Перезапустите службу sshd:
# systemctl restart sshd
Подключитесь к серверу по SSH без использования пароля. Например, запустите PuTTY, проверьте, что во вкладке Connections -> Auth содержится путь к закрытому ключу и откройте подключение.
Login as: root Authenticating with public key “rsa-key-20230205” Last login: Sun Feb 5 13:11:24 2023 from 1.1.1.1
В случае успешной аутентификации по SSH-ключу вы получите доступ к командной строке сервера и сообщение вида Authenticating with public key «rsa-key-20230205», где rsa-key-20230205 — имя применённого закрытого ключа, указанное вами в файле authorized_keys.
Использование проверки подлинности с ключом SSH
Вы можете подключиться к репозиториям Git средствами SSH в macOS, Linux или Windows для безопасного подключения с помощью проверки подлинности HTTPS.
URL-адреса SSH изменились, но старые URL-адреса SSH продолжают работать. Если вы уже настроили SSH, обновите удаленный URL-адрес до нового формата:
Актуальные URL-адреса SSH начинаются с ssh.dev.azure.com . Предыдущие URL-адреса используются vs-ssh.visualstudio.com .
- Проверьте, какие удаленные серверы используют SSH. Запустите git remote -v в оболочке или используйте вместо этого клиент GUI.
- Посетите репозиторий в Интернете и выберите «Клонировать«.
- Выберите SSH и скопируйте новый URL-адрес SSH .
- В оболочке выполняется git remote set-url для каждого удаленного репозитория, который требуется обновить. Кроме того, используйте клиент графического интерфейса для обновления удаленный URL-адрес.
Как работает проверка подлинности ключа SSH
Проверка подлинности открытого ключа SSH работает с асимметричной парой созданных ключей шифрования. Открытый ключ предоставляется совместно с Azure DevOps и используется для проверки первоначального подключения ssh. Закрытый ключ хранится в безопасности и безопасности в системе.
Настройка проверки подлинности ключа SSH
Ниже описана настройка проверки подлинности ключа SSH на следующих платформах с помощью командной строки (также называемой shell ):
- Linux
- macOS
- Системы Windows под управлением Git для Windows
По состоянию на Visual Studio 2017 SSH можно использовать для подключения к репозиториям Azure DevOps Git.
В Windows мы рекомендуем использовать диспетчер учетных данных Git или личные маркеры доступа.
Шаг 1. Создание ключей SSH
Если вы уже создали ключи RSA SSH в системе, пропустите этот шаг и настройте ключи SSH. Чтобы проверить это, перейдите в домашний каталог и просмотрите папку .ssh ( %UserProfile%\.ssh\ в Windows или ~/.ssh/ linux, macOS и Windows с помощью Git Bash). Если вы видите два файла с именем id_rsa и id_rsa.pub соответственно продолжите настройку ключей SSH.
Чтобы использовать аутентификацию на основе ключей, необходимо заранее создать для клиента одну или несколько пар открытого и закрытого ключей. ssh-keygen.exe используется для создания файлов ключей и можно указать алгоритмы DSA, RSA, ECDSA или Ed25519. Если алгоритм не указан, используется RSA.
Единственным типом ключа SSH, поддерживаемым Azure DevOps, является RSA.
Чтобы создать файлы ключей с помощью алгоритма RSA, выполните следующую команду из PowerShell или другой оболочки, например bash на клиенте:
ssh-keygen
Выходные данные команды должны отображать следующие выходные данные (где username заменяется вашим именем пользователя):
Generating public/private rsa key pair. Enter file in which to save the key (C:\Users\username/.ssh/id_rsa):
Можно нажать клавишу ВВОД, чтобы принять вариант по умолчанию, или указать путь и (или) имя файла для создания файлов ключей. На этом этапе вам будет предложено указать парольную фразу для шифрования файлов закрытого ключа. Парольная фраза может быть пустой, но не рекомендуется. Парольная фраза в сочетании с файлом ключа позволяет выполнить двухфакторную аутентификацию.
Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:\Users\username/.ssh/id_rsa. Your public key has been saved in C:\Users\username/.ssh/id_rsa.pub. The key fingerprint is: SHA256:FHK6WjcUkcfQjdorarzlak1Ob/x7AmqQmmx5ryYYV+8 username@LOCAL-HOSTNAME The key's randomart image is: +---[RSA 3072]----+ | . ** o | | +.o= . | | . o+ | | .+. . | | .ooS . | | . .oo.=.o | | =.= O.= . | | . B BoE + . . | | . *+*o. .o+ | +----[SHA256]-----+
Теперь у вас есть пара ключей public/private rsa в указанном расположении. Файлы PUB являются открытыми ключами, а файлы без расширения — закрытыми.
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 10/11/2022 6:29 PM 2610 id_rsa -a---- 10/11/2022 6:29 PM 578 id_rsa.pub
Никогда не делитесь содержимым закрытого ключа. Если закрытый ключ скомпрометирован, злоумышленники могут использовать его для того, чтобы заставить серверы думать, что подключение поступает от вас. Файлы закрытого ключа эквивалентны паролю и должны быть защищены таким же образом.
Шаг 2. Добавление открытого ключа в Azure DevOps
Свяжите открытый ключ, созданный на предыдущем шаге, с идентификатором пользователя.
Необходимо повторить эту операцию для каждой организации, к которой вы имеете доступ и хотите использовать SSH.
- Откройте параметры безопасности, перейдя на веб-портал и выбрав значок рядом с аватаром в правом верхнем углу пользовательского интерфейса. Выберите открытые ключи SSH в появившемся меню.

- Щелкните + Создать ключ.

- Скопируйте содержимое открытого ключа (например, id_rsa.pub ), созданное в поле данных открытого ключа.
Важно! Избегайте добавления пробелов или новых строк в поле «Ключевые данные «, так как они могут привести к тому, что Azure DevOps использует недопустимый открытый ключ. При вставке в ключ в конце часто добавляется новая строка. Не забудьте удалить эту новую линию, если она возникает.

ssh -T git@ssh.dev.azure.com
Если это был первый раз при подключении, вы должны получить следующие выходные данные:
The authenticity of host 'ssh.dev.azure.com ()' can't be established. RSA key fingerprint is SHA256:ohD8VZEXGWo6Ez8GSEJQ9WpafgLFsOfLOtGGQCQo6Og. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])?
Сравните заданный отпечаток с отпечатками пальцев, предлагаемыми на странице выше упоминание параметров. Продолжайте только в том случае, если они совпадают! Если все настроено правильно, выходные данные должны выглядеть следующим образом:
remote: Shell access is not supported.
Шаг 2. Добавление открытого ключа в Azure DevOps
Свяжите открытый ключ, созданный на предыдущем шаге, с идентификатором пользователя.
Необходимо повторить эту операцию для каждой организации, к которой у вас есть доступ и для которой требуется использовать SSH.
- Откройте параметры безопасности, перейдя на веб-портал и выбрав аватар в правом верхнем углу пользовательского интерфейса. Выберите «Безопасность » в появившемся меню.

- Щелкните + Создать ключ.

- Скопируйте содержимое открытого ключа (например, id_rsa.pub ), созданное в поле данных открытого ключа.
Примечание. С помощью команды $ cat ~/.ssh/id_rsa.pub можно распечатать содержимое файла id_rsa.pub в терминале, а затем скопировать его в буфер обмена. Если файл открытого ключа SSH имеет другое имя или путь, отличный от примера кода, измените имя файла или путь в соответствии с текущей настройкой. При копировании ключа не добавляйте новые строки или пробелы. Кроме того, можно найти скрытую папку SSH, открыть файл в избранном текстовом редакторе и скопировать его в буфер обмена.

Важно! Не добавляйте пробелы или новые строки в поле «Ключевые данные «, так как они могут привести к тому, что Azure DevOps использует недопустимый открытый ключ. При вставке в ключ новая строка часто добавляется в конце. Не забудьте удалить эту новую строку, если она возникает.

ssh -T git@ssh.dev.azure.com
Если это был первый раз при подключении, вы должны получить следующие выходные данные:
The authenticity of host 'ssh.dev.azure.com ()' can't be established. RSA key fingerprint is SHA256:ohD8VZEXGWo6Ez8GSEJQ9WpafgLFsOfLOtGGQCQo6Og. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])?
Сравните заданный отпечаток с отпечатками пальцев, предлагаемыми на странице выше упоминание параметров. Продолжайте только в том случае, если они совпадают! Если все настроено правильно, выходные данные должны выглядеть следующим образом:
remote: Shell access is not supported.
Шаг 3. Клонирование репозитория Git с помощью SSH
Сведения об использовании SSH с репозиторием, ранее клонированного через HTTPS, см. в статье об обновлении удаленных служб на SSH.

- Скопируйте URL-адрес клона SSH на веб-портале. В этом примере URL-адрес клона SSH предназначен для репозитория в организации с именем fabrikam-fibre, как указано первой частью URL-адреса после dev.azure.com .
Примечание. При использовании Azure DevOps Services формат URL-адреса проекта — dev.azure.com/
git clone git@ssh.dev.azure.com:v3/fabrikam-fiber/FabrikamFiber/FabrikamFiber
Теперь необходимо ввести парольную фразу для ключа SSH, прежде чем продолжить работу, если она не управляется агентом SSH:
Cloning into 'FabrikamFiber'. Enter passphrase for key '/c/Users/username/.ssh/id_rsa': remote: Azure Repos remote: Found 127 objects to send. (50 ms) Receiving objects: 100% (127/127), 56.67 KiB | 2.58 MiB/s, done. Resolving deltas: 100% (15/15), done.
Чтобы использовать агент SSH для управления ключами SSH, чаще всего используется агент SSH. Настройка агента выходит за рамки область этой статьи, хотя.
Вопросы и устранение неполадок
Вопрос. SSH не может установить подключение. Что следует делать?
Ответ. Существует несколько различных проблем, которые могут возникнуть:
Unable to negotiate with port 22: no matching host key type found. Their offer: ssh-rsa
Измените конфигурацию SSH, чтобы изменить параметры безопасности для Azure DevOps, добавив в ~/.ssh/config файл ( %UserProfile%\.ssh\config в Windows):
Host ssh.dev.azure.com vs-ssh.visualstudio.com HostkeyAlgorithms +ssh-rsa
OpenSSH не рекомендует алгоритм подписи открытого ключа в версии 8.2 и отключен по умолчанию в версии 8.8. ssh-rsa
Unable to negotiate with port 22: no matching MAC found. Their offer: hmac-sha2-256,hmac-sha2-512
Измените конфигурацию SSH, чтобы изменить параметры безопасности для Azure DevOps, добавив в ~/.ssh/config файл ( %UserProfile%\.ssh\config в Windows):
Host ssh.dev.azure.com vs-ssh.visualstudio.com MACs +hmac-sha2-512,+hmac-sha2-256
Unable to negotiate with 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
Измените конфигурацию SSH, чтобы изменить параметры безопасности для Azure DevOps, добавив в ~/.ssh/config файл ( %UserProfile%\.ssh\config в Windows):
Host ssh.dev.azure.com vs-ssh.visualstudio.com KexAlgorithms +diffie-hellman-group-exchange-sha256,+diffie-hellman-group14-sha1,+diffie-hellman-group1-sha1
Алгоритм diffie-hellman-group1-sha1 обмена ключами по умолчанию отключен в версии 6.9 OpenSSH и diffie-hellman-group14-sha1 версии 8.2.
Для локально размещенных экземпляров Azure DevOps Server и TFS вместо строки ssh.dev.azure.com vs-ssh.visualstudio.com используйте соответствующее имя Host узла.
Вопрос. Как я могу вспомнить парольную фразу Git для моего ключа?
Ответ. Для этого можно использовать агент SSH. Linux, macOS и Windows (начиная с Windows 10 (сборка 1809) или с помощью Git для Windows с Git Bash) все вставляются с агентом SSH. Агент SSH можно использовать для кэширования ключей SSH для повторного использования. Обратитесь к руководству поставщика SSH, чтобы узнать, как его использовать.
Вопрос. Я использую PuTTY в качестве клиента SSH и создал мои ключи с помощью PuTTYgen. Можно ли использовать эти ключи с Azure DevOps Services?
Ответ. Да. Загрузите закрытый ключ с помощью PuTTYgen, перейдите в меню «Преобразования» и выберите «Экспорт openSSH». Сохраните файл закрытого ключа, а затем выполните действия по настройке ключей, отличных от по умолчанию. Скопируйте открытый ключ непосредственно из окна PuTTYgen и вставьте его в поле «Данные ключа» в параметрах безопасности.
Вопрос. Как проверить, что отправленный открытый ключ совпадает с локальным ключом?
Ответ. С помощью командной строки можно проверить отпечаток открытого ключа, отправленного с помощью следующей ssh-keygen команды, отображаемой в профиле. Если вы не используете значения по умолчанию, необходимо изменить путь и имя файла открытого ключа.
ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
Затем вы можете сравнить сигнатуру MD5 с одной из них в профиле. Это проверка полезно, если у вас возникли проблемы с подключением или возникли проблемы с неправильной вставой открытого ключа в поле «Данные ключей» при добавлении ключа в Azure DevOps.
Вопрос. Как начать использовать SSH в репозитории, где сейчас используется ПРОТОКОЛ HTTPS?
Ответ. Чтобы изменить URL-адрес HTTPS на SSH, необходимо обновить удаленный origin в Git. Получив URL-адрес клонирования SSH, выполните следующую команду:
git remote set-url origin
Команды Git, обращающиеся к удаленному вызову origin , теперь будут использовать SSH.
В: Я использую Git LFS с Azure DevOps Services, и при извлечении файлов, отслеживаемых Git LFS, возникают ошибки.
Ответ. Azure DevOps Services в настоящее время не поддерживает LFS по протоколу SSH. Используйте протокол HTTPS для подключения к репозиториям с отслеживаемыми файлами Git LFS.
Вопрос. Как использовать расположение ключа, отличное от по умолчанию, а не ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub?
Ответ. Чтобы использовать ключ, хранящийся в другом месте по умолчанию, выполните следующие две задачи:
- Ключи должны находиться в папке, которую можно прочитать или изменить. Если папка имеет более широкие разрешения, SSH не будет использовать ключи.
- Необходимо сообщить SSH о расположении ключа, например указав его в качестве удостоверения в конфигурации SSH:
Host ssh.dev.azure.com IdentityFile ~/.ssh/id_rsa_azure IdentitiesOnly yes
Этот IdentitiesOnly yes параметр гарантирует, что SSH не будет использовать другое доступное удостоверение для проверки подлинности. Это особенно важно, если доступно несколько удостоверений.
Вопрос. У меня есть несколько ключей SSH. Разделы справки использовать правильный ключ SSH для Azure DevOps?
Ответ. Как правило, если настроить несколько ключей для клиента SSH и подключиться к серверу SSH, клиент может попробовать ключи по одному за раз, пока сервер не примет один.
Однако это не работает с Azure DevOps по техническим причинам, связанным с протоколом SSH и структурированием URL-адресов SSH Git. Azure DevOps будет слепо принимать первый ключ, который клиент предоставляет во время проверки подлинности. Если этот ключ недопустим для запрошенного репозитория, запрос завершится ошибкой без попытки других доступных ключей из-за следующей ошибки:
remote: Public key authentication failed. fatal: Could not read from remote repository.
Для Azure DevOps необходимо настроить SSH для явного использования определенного файла ключа. Процедура аналогична использованию ключа, хранящегося в расположении, отличном от по умолчанию. Просто сообщите SSH использовать правильный ключ SSH для узла Azure DevOps.
Вопрос. Разделы справки использовать разные ключи SSH для разных организаций в Azure DevOps?
Ответ. Azure DevOps будет слепо принимать первый ключ, который клиент предоставляет во время проверки подлинности. Если этот ключ недопустим для запрошенного репозитория, запрос завершится ошибкой следующей ошибки:
remote: Public key authentication failed. fatal: Could not read from remote repository.
Однако можно изменить конфигурацию SSH, чтобы различать разные организации и предоставлять разные ключи для каждого. Для этого необходимо использовать псевдонимы узлов для создания отдельных Host разделов в конфигурации SSH. Это связано с тем, что все размещенные URL-адреса Azure DevOps имеют одно и то же имя узла ( ssh.dev.azure.com ), поэтому SSH по умолчанию не имеет способа отличить их.
# The settings in each Host section are applied to any Git SSH remote URL with a # matching hostname. # Generally: # * SSH uses the first matching line for each parameter name, e.g. if there's # multiple values for a parameter across multiple matching Host sections # * "IdentitiesOnly yes" prevents keys cached in ssh-agent from being tried before # the IdentityFile values we explicitly set. # * On Windows, ~/.ssh/your_private_key maps to %USERPROFILE%\.ssh\your_private_key, # e.g. C:\Users\\.ssh\your_private_key. # Imagine that we have the following two SSH URLs: # * git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo # * For this, we want to use `fabrikamkey`, so we'll create `devops_fabrikam` as # a Host alias and tell SSH to use `fabrikamkey`. # * git@ssh.dev.azure.com:v3/Contoso/Project2/con_repo # * For this, we want to use `contosokey`, so we'll create `devops_contoso` as # a Host alias and tell SSH to use `contosokey`. # # To set explicit keys for the two host aliases and to tell SSH to use the correct # actual hostname, add the next two Host sections: Host devops_fabrikam HostName ssh.dev.azure.com IdentityFile ~/.ssh/private_key_for_fabrikam IdentitiesOnly yes Host devops_contoso HostName ssh.dev.azure.com IdentityFile ~/.ssh/private_key_for_contoso IdentitiesOnly yes
После этого вместо использования реальных URL-адресов сообщите Git, что вы хотите использовать эти URL-адреса для каждого репозитория в качестве удаленного, заменив имя узла в существующих удаленных удаленных адресах devops_fabrikam и devops_contoso соответственно. Например git@ssh.dev.azure.com:v3/Fabrikam/Project1/fab_repo , станет git@devops_fabrikam:v3/Fabrikam/Project1/fab_repo .
Вопрос. Какие уведомления можно получать о ключах SSH?
Ответ. Каждый раз, когда вы регистрируете новый ключ SSH в Azure DevOps Services, вы получите уведомление электронной почты о том, что новый ключ SSH добавлен в свою учетную запись.

Вопрос. Что делать, если я верю, что кто-то, кроме меня, добавляет ключи SSH в свою учетную запись?
Ответ. Если вы получите уведомление о регистрации ключа SSH, и вы не отправили его в службу вручную, ваши учетные данные могут быть скомпрометированы.
Следующим шагом будет изучение того, был ли ваш пароль скомпрометирован. Изменение пароля всегда является хорошим шагом для защиты от этого вектора атаки. Если вы являетесь пользователем Microsoft Entra, обратитесь к администратору, чтобы проверка, если ваша учетная запись использовалась из неизвестного источника или расположения.
Вопрос. Что делать, если мне по-прежнему предлагается пароль и GIT_SSH_COMMAND=»ssh -v» git fetch отображается no mutual signature algorithm или corresponding algo not in PubkeyAcceptedAlgorithms ?
Ответ. Некоторые дистрибутивы Linux, такие как Fedora Linux, имеют политики шифрования, требующие более сильных алгоритмов подписи SSH, чем Azure DevOps поддерживает (по состоянию на январь 2021 г.). Существует открытый запрос функции для добавления этой поддержки.
Чтобы обойти проблему, добавьте следующий код в конфигурацию SSH ( ~/.ssh/config ):
Host ssh.dev.azure.com vs-ssh.visualstudio.com PubkeyAcceptedKeyTypes +ssh-rsa
Для локально размещенных экземпляров Azure DevOps Server и TFS вместо строки ssh.dev.azure.com vs-ssh.visualstudio.com используйте соответствующее имя Host узла.
4.3 Git на сервере — Генерация открытого SSH ключа
Как отмечалось ранее, многие Git-серверы используют аутентификацию по открытым SSH-ключам. Для того чтобы предоставить открытый ключ, каждый пользователь в системе должен его сгенерировать, если только этого уже не было сделано ранее. Этот процесс аналогичен во всех операционных системах. Сначала вам стоит убедиться, что у вас ещё нет ключа. По умолчанию пользовательские SSH ключи сохраняются в каталоге ~/.ssh домашнем каталоге пользователя. Вы можете легко проверить наличие ключа перейдя в этот каталог и посмотрев его содержимое:
$ cd ~/.ssh $ ls authorized_keys2 id_dsa known_hosts config id_dsa.pub
Ищите файл с именем id_dsa или id_rsa и соответствующий ему файл с расширением .pub . Файл с расширением .pub — это ваш открытый ключ, а второй файл — ваш приватный ключ. Если указанные файлы у вас отсутствуют (или даже нет каталога .ssh ), вы можете создать их используя программу ssh-keygen , которая входит в состав пакета SSH в системах Linux/Mac, а для Windows поставляется вместе с Git:
$ ssh-keygen -o Generating public/private rsa key pair. Enter file in which to save the key (/home/schacon/.ssh/id_rsa): Created directory '/home/schacon/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/schacon/.ssh/id_rsa. Your public key has been saved in /home/schacon/.ssh/id_rsa.pub. The key fingerprint is: d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local
Сначала программа попросит указать расположение файла для сохранения ключа ( .ssh/id_rsa ), затем дважды ввести пароль для шифрования. Если вы не хотите вводить пароль каждый раз при использовании ключа, то можете оставить его пустым или использовать программу ssh-agent . Если вы решили использовать пароль для приватного ключа, то настоятельно рекомендуется использовать опцию -o , которая позволяет сохранить ключ в формате, более устойчивом ко взлому методом подбора, чем стандартный формат.
Теперь каждый пользователь должен отправить свой открытый ключ вам или тому, кто администрирует Git-сервер (подразумевается, что ваш SSH-сервер уже настроен на работу с открытыми ключами). Для этого достаточно скопировать содержимое файла с расширением .pub и отправить его по электронной почте. Открытый ключ выглядит примерно так:
$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3 Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@mylaptop.local
Более подробное руководство по созданию SSH-ключей и конфигурации клиента на различных системах вы можете найти в руководстве GitHub.
Как создать SSH ключи на Windows?

Для создания ключа в ОС Windows мы будем использовать утилиту PuTTYgen.
Она устанавливается как часть стандартной установки пакета PuTTY.msi
Нет необходимости в отдельной загрузке PuTTYgen
Загрузите установочный пакет PuTTY https://putty.org и установите весь пакет.
Перейдите в меню «Пуск» —> «Все программы» —> «PuTTYgen«

Чтобы создать новую пару ключей, выберите тип ключа для генерации из нижней части экрана
(с использованием SSH-2 RSA с размером ключа 2048 бит подходит для большинства людей, другой хорошей общеизвестной альтернативой является ECDSA).
Затем нажмите «Generate» и начните перемещать курсор в окне на пустом поле.
Putty использует движения мыши для генерации случайных значений.
Точный способ перемещения мыши не может быть предсказан внешним злоумышленником.
Вам потребуется подвигать мышью в течение некоторого времени, в зависимости от размера вашего ключа. Когда вы ее перемещаете, зеленый индикатор прогресса должен продвигаться вперед.

Как только индикатор выполнения будет заполнен, произойдет фактическое вычисление генерации ключа.
По завершении открытый ключ (public key) должен появиться в окне.
Теперь вы можете указать фразу пароль для ключа (можно не указывать).
Вам необходимо сохранить хотя бы закрытый ключ (privat key), нажав «Save private key«.

К серверам OpenSSH доступ к учетной записи предоставляется путем добавления открытого ключа (public key) в файл ~/.ssh /authorized_keys на сервере.
Установка ключа
Чтобы установить открытый ключ (public key), подключитесь к серверу, отредактируйте файл authorized_keys Вашим любимым редактором и вырежьте и вставьте вывод открытого ключа в файл authorized_keys. Сохраните файл.
Теперь осталось добавить наш приватный ключ (Privat key) в ssh-agent’a «Pageant» («Пуск» —> «PuTTY» —> «Pageant«).
Pageant приложение, входящее в дистрибутив PuTTY.
Это программное обеспечение используется для хранения приватных ключей в памяти в раскодированном виде, которые используются при запросе удаленного сервера.
Для того, чтобы добавить созданный ранее приватный ключ, требуется запустить Pageant, вызывать его из системного трея правой кнопкой мыши и в появившемся меню выбрать пункт «Add key«.

После того, как ключ выбран, может появится окно ввода пароля, который был добавлен при создании ключа для увеличения безопасности.
Далее, все загруженные ключи доступны в списке ключей (пункт меню View Keys):

Теперь логинимся в PuTTY.
Если Вы сделали всё правильно, то увидите сообщение:
login as: root Authenticating with public key "rsa-key-20171120" from agent