openSSH игнорирует переменную HOME env

Я пытался разобраться Could not create directory проблема с openSSH, установленным через cygwin, и пробовал все решения, которые я могу найти в Интернете, но ни одно из них не работает...

Я установил Cygwin, похоже, работает. Я установил openSSH, который также, кажется, работает (я могу ssh на другие машины).

Я положил папку Cygwin bin в pathтак что я могу бежать ssh Из командной строки, и это тоже работает. Но каждый раз, когда я запускаю его, он выдает ошибку:

Could not create directory '/home/will/.ssh'
The authenticity of host 'blah (111.222.333.444)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)?

Почему он пытается использовать этот каталог? Я установил env. переменная HOME в %USERPROFILE%, он печатает правильное местоположение, когда я повторяю его, и я также создал .ssh Дир и сделал ssh-keygen вещь там.

Я где-то читал, что мне нужно заменить home/will в cygwin/etc/passwd, но у меня нет этого файла. И если я использую mkpasswd -l чтобы сгенерировать его, он не включает меня как пользователя, поэтому я ничего не могу заменить. Я действительно в тупике.

Что мне нужно сделать / установить, чтобы сделать эту работу?

3 ответа

Если вы загляните внутрь "/usr/bin/ssh-user-config", вы заметите совет:

    csih_error_multi \
      "There is no home directory set for you in the account database." \
      'Setting $HOME is not sufficient!'

Не касаясь пользовательской базы данных Windows, самый быстрый способ определить другой дом:

 mkpasswd -d -u "Your_Windows_User_Name" > /etc/passwd
or
 mkpasswd -l -u "Your_Windows_User_Name" > /etc/passwd  

скорее всего "будет". Поскольку вы пользователь локальный или доменный.

И измените последнее, но одно поле "/ home / will" на нужное вам значение.

Дополнительное чтение для пользователей Windows и Cygwin:

https://cygwin.com/cygwin-ug-net/ntsec.html
https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-mapping-nsswitch

Вы можете отредактировать /etc/ssh/ssh_config и добавить следующие свойства:

IdentityFile /C/Users/username/.ssh/id_rsa
UserKnownHostsFile /C/Users/username/.ssh/known_hosts

Это все еще печатает ошибку Could not create directory '/home/username/.ssh'. Но кроме этого все работает. Кстати, я использую msys2, но теоретически это должно работать и для вас.

Спасибо matzeri за подсказку, чтобы посмотреть в / usr / bin / ssh-user-conifg. Заглянув туда, я понял, что скрипт получает домашний каталог через вызов getent passwd, Когда я запускаю его в своей системе, я вижу, что домашний каталог, который он ищет, находится в /home (что в файловой системе Windows переводится в C:\Cygwin64\home\myusername)

Мой фактический домашний каталог Windows (%USERDIR%) - это C:\Users\myusername, которое Cygwin видит как /cygdrive/c/Users/myusername.

Я обнаружил, что в качестве альтернативы созданию файла /etc/passwd я могу символическую ссылку на мой домашний каталог Windows на местоположение, которое хочет Cygwin:

cd /home
rm -rf myusername
ln -s /cygdrive/c/Users/myusername .

После этого у SSH нет проблем с чтением каталога.ssh в моем домашнем каталоге Windows.

Другие вопросы по тегам