Настройка sshkey для git bash на виртуальной машине Windows 10

ОС: Ubuntu с ВМ Windows 10

Цель: настроить git bash на виртуальной машине Windows 10 с ключом ssh для использования с частным Bitbucket.

Обзор. Создание ключа SSH в расположении, отличном от используемого по умолчанию, для работы с git bash не сработало. Попыткой решения было создать местоположение по умолчанию и переместить ключ в это место для проверки. Я недостаточно знаю, как генерируется местоположение по умолчанию или как git bash ищет sshkey для сравнения с битбакетом. Я подозреваю, что на проблему могут влиять сетевые диски/ИТ, но я не знаю, какие вопросы задавать. Шаги и подробности ниже. Да, ключ ssh был добавлен в учетную запись Bitbucket.

При создании ключа ssh предлагаемое местоположение — /home/username/.ssh... Я не уверен, откуда берется этот предлагаемый путь. Я настроил несколько компьютеров с ключами git bash/ssh, и этот предлагаемый путь различается. Как устанавливается предлагаемый путь? и Как устанавливается путь поиска ключа ssh?

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/plane/.ssh/id_rsa): /c/Users/username/.ssh/id_rsa
~ pwd = c/Users/username

/ существует, но home не существует

$ ls -l /
total 3076
drwxr-xr-x  1 username 1061577       0 Feb  3 15:57 bin/
drwxr-xr-x  1 username 1061577       0 Feb  3 15:57 cmd/
drwxr-xr-x  1 username 1061577       0 Feb  3 15:57 dev/
drwxr-xr-x  1 username 1061577       0 Feb  3 15:57 etc/
-rwxr-xr-x  1 username 1061577  152112 Jan 13 20:31 git-bash.exe*
-rwxr-xr-x  1 username 1061577  151600 Jan 13 20:31 git-cmd.exe*
-rw-r--r--  1 username 1061577   18765 Dec 10 18:25 LICENSE.txt
drwxr-xr-x  1 username 1061577       0 Feb  3 15:56 mingw64/
dr-xr-xr-x 13 username 1061577       0 Feb  3 17:57 proc/
-rw-r--r--  1 username 1061577  160771 Jan 13 21:08 ReleaseNotes.html
drwxr-xr-x  1 username 1061577       0 Feb  3 17:02 tmp/
-rw-r--r--  1 username 1061577 1161914 Feb  3 15:57 unins000.dat
-rwxr-xr-x  1 username 1061577 1299888 Feb  3 15:51 unins000.exe*
-rw-r--r--  1 username 1061577   22795 Feb  3 15:57 unins000.msg
drwxr-xr-x  1 username 1061577       0 Feb  3 15:57 usr/

Разрешения запрещены

mkdir -p /home/username
mkdir: cannot create directory ‘/home’: Permission denied

Гит-клон:

$ git clone ssh://[email protected]/project.git
Cloning into 'project'...
Could not create directory '/home/username/.ssh'.
The authenticity of host 'example' can't be established.
RSA key fingerprint is SHA256.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
example: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Редактировать:

Я также попытался сделать следующее.

Чтобы указать, где на самом деле находится .ssh и где я хочу, чтобы он был. /c/Users/plane/.ssh

git config --global core.sshCommand "ssh -i ~/.ssh/id_rsa.pub"

1) Не удалось создать '/home/plane/.ssh'

2) Не удалось добавить хост в список известных хостов (/home/plane/.ssh/known_hosts).

3) Загрузить ключ "/c/Users/plane/.ssh/id_rsa.pub": неверный формат

git clone ssh://[email protected]
Cloning into 'project'...
Could not create directory '/home/plane/.ssh'.
The authenticity of host can't be established.
RSA key fingerprint is SHA256:.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Failed to add the host to the list of known hosts (/home/plane/.ssh/known_hosts).
Load key "/c/Users/plane/.ssh/id_rsa.pub": invalid format
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Спасибо,


person plane    schedule 03.02.2020    source источник
comment
Это действительно старо/поздно, но вы должны использовать закрытый ключ для аутентификации (добавьте ключ паба в свои пользовательские настройки Github).   -  person Jess    schedule 21.04.2021


Ответы (1)


Вы должны использовать:

  • обычный CMD (в вашей виртуальной машине Windows 10) с упрощенным путем

    set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\
    set GH=C:\path\to\git
    set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH%
    
  • ключ, сгенерированный в папке по умолчанию %USERPROFILE%.ssh

    ssh-keygen -P "" -t rsa -m PEM
    
  • зарегистрируйте содержимое id_rsa.pub в Профиль BitBucket


known_hosts по-прежнему ссылается на расположение по умолчанию /home/username/.ssh.
Как изменить это расположение по умолчанию?

Это управляется переменной окружения $HOME/%HOME%.
SSH будет искать known_hosts в $HOME/.ssh.

person VonC    schedule 04.02.2020
comment
Я не вижу связи между PATH и тем, откуда берется каталог ssh-keygen по умолчанию. env показывает HOME и USERPROFILE, я не могу найти ссылку на /home/username. env HOME=/c/Users/plane USERPROFILE=C:\Users\plane - person plane; 04.02.2020
comment
@plane Используете ли вы Git в сеансе Windows 10 (VM)? Если это так, PATH должен убедиться, что нет побочных эффектов с какой-либо другой программой. Это только для тестирования. - person VonC; 04.02.2020
comment
Я могу сгенерировать sshkey и добавить его в битбакет, конкретная проблема, с которой я столкнулся, связана с тем, что git/gitbash считает, что ключ ssh по умолчанию. Я попытался изменить местоположение ssh с помощью: ``` git config --global core.sshCommand ssh -i ~/.ssh/id_rsa.pub ``` Известные_хосты по-прежнему ссылаются на местоположение по умолчанию /home/username /.ssh. Как изменить это местоположение по умолчанию? - person plane; 04.02.2020
comment
@plane Используете ли вы Git в сеансе Windows 10 (VM)? - person VonC; 04.02.2020
comment
Я использую git для Windows на виртуальной машине Windows 10. Хост ОС Ubuntu, гостевая ОС Windows 10. - person plane; 04.02.2020
comment
@самолет в порядке. В вашем сеансе виртуальной машины Windows в обычном CMD у вас определена переменная среды HOME? (set HOME) - person VonC; 04.02.2020
comment
Меня смущает, что SSH будет искать известные_хосты в $HOME/.ssh, поскольку я вижу разные результаты. HOME=/c/Users/plane, но оказывается, что /home/username/.ssh — это каталог поиска / — это существующий каталог, /home не существует. Я изменил исходное сообщение с подробным описанием этой информации. - person plane; 04.02.2020
comment
C:\Users\plane›set HOME HOMEDRIVE=C: HOMEPATH=\Users\plane - person plane; 04.02.2020
comment
@plane Точно, нет ДОМА. введите set HOME=%USERPROFILE%, затем из той же CMD запустите git bash. Проверьте, сохраняется ли проблема. - person VonC; 04.02.2020
comment
в gitbash env возвращает HOME=/c/Users/plane и USERPROFILE=C:\Users\plane Возвращает ли env в gitbash переменные окружения, отличные от переменных среды Windows? **Как gitbash может показать, что переменная env установлена ​​на что-то? - person plane; 04.02.2020
comment
@plane Да, это ожидаемо: /c/Users/plane и C:\Users\plane - один и тот же путь. Теперь запустите ssh из git bash, и он найдет ваш файл known_hosts. - person VonC; 04.02.2020
comment
Приношу свои извинения за необходимость расшифровывать, чтобы полностью понять. Я понимаю, что /c/ и C: это один и тот же путь. Насколько я понимаю, команда env говорит мне, что эти пути соответствуют моим ожиданиям, но Windows set HOME говорит нам, что он не установлен? и как это влияет на желаемый путь ssh. Поскольку мне кажется излишним устанавливать HOME на путь, который env уже сообщает мне, это - person plane; 04.02.2020
comment
@plane да, я всегда сначала устанавливаю его в Windows, чтобы убедиться, что git bash будет повторно использовать тот же путь. - person VonC; 04.02.2020
comment
У вас есть ссылка на SSH, которая будет искать известные_хосты в $HOME/.ssh - person plane; 04.02.2020
comment
@plane linux.die.net/man/1/ssh: ssh автоматически поддерживает и проверяет базу данных, содержащую идентификацию всех хостов, с которыми он когда-либо использовался. Ключи хоста хранятся в ~/.ssh/known_hosts в домашнем каталоге пользователя. - person VonC; 04.02.2020