Predvoditelev.RU
Заметки

GIT для Windows: запрос ключевой фразы для SSH-ключа через графический интерфейс (GUI)

Специфическая задача, которая может потребоваться в случаях, когда у утилиты ssh нет возможности запросить SSH-ключ через консоль.

Решается задача с помощью переменных окружения SSH_ASKPASS и DISPLAY, которые влияют на поведение ssh:

  • DISPLAY — адрес X11-сервера для вывода графического интерфейса.
  • SSH_ASKPASS — программа, которая будет вызвана для получения ключевой фразы в случае, когда задана переменная DISPLAY и ssh не имеет связанного с ним терминала.

Устанавливаем значения в командной строке Windows:

SET DISPLAY=localhost:0.0
SET SSH_ASKPASS=C:\Program Files\Git\mingw64\libexec\git-core\git-askpass.exe

... или в PowerShell:

[Environment]::SetEnvironmentVariable("DISPLAY", "localhost:0.0")
[Environment]::SetEnvironmentVariable("SSH_ASKPASS", "C:\Program Files\Git\mingw64\libexec\git-core\git-askpass.exe")

С этими значениями в случае, когда ssh не может запросить ключевую фразу в консоли, будет запрашивать его с помощью утилиты, которая идёт в комплекте с GIT для Windows.

Результат можно увидеть на скриншоте:

Запрос пароля для SSH-ключа в GIT через графический интерфейс
Запрос пароля для SSH-ключа в GIT через графический интерфейс

В будущих версиях OpenSSH ожидается добавление переменной SSH_ASKPASS_REQUIRE, установив которую в значение force, ssh всегда будет запрашивать ключевую фразу, даже если переменная DISPLAY не задана.

Автоматическая настройка

Есть различные варианты автоматической установки значений DISPLAY и SSH_ASKPASS.

Настройка ssh-команды в GIT

Добавляем установку значений в ssh-команду GIT:

git config --global core.sshCommand "SSH_ASKPASS=\"C:\Program Files\Git\mingw64\libexec\git-core\git-askpass.exe\" DISPLAY=localhost:0.0 ssh"

Эмулятор консоли cmder

В cmder можно указать значения в файле config\user-profile.cmd (в папке утилиты), который автоматически выполняется при старте консоли:

Содержимое файла user-profile.cmd

PowerShell

Добавляем установку значений в файл конфигурации Microsoft.PowerShell_profile.ps1. Местонахождение файла можно узнать выведя значение переменной $PROFILE в PowerShell. Обычно этот файл находится в домашней директории по адресу ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1.

Полезные ссылки

При написании статьи использовалось следующее ПО:

  • Windows 10
  • OpenSSH 7.7p1
  • GIT for Windows 2.28.0
@sergei_predvoditelev — Авторский канал в Telegram: заметки о веб-разработке, PHP, открытом ПО, развитии и немного о жизни.