3

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

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

Я поместил папку bin Cygwin в 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 ответа3

2

Если вы загляните внутрь «/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
1

Вы можете отредактировать /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, но теоретически это должно работать и для вас.

0

Спасибо 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .