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

954
will

Я пытался разобраться в 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
проверьте http://stackoverflow.com/questions/225764/safely-change-home-directory-in-cygwin Chris.C 8 лет назад 0
@ Chris.C Какой ответ? мой пользователь не отображается в файле, созданном `mkpasswd`, так как я могу отредактировать предоставленный там домашний каталог? will 8 лет назад 0

3 ответа на вопрос

2
matzeri

If you look inside "/usr/bin/ssh-user-config", you will notice the advise:

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

Without touching the Windows user database, the fastest way to define a different home is:

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

likely "will". As you user is local or is a domain one.

And modify the last but one field "/home/will" with the value you want.

Additional reading, on Windows and Cygwin users:

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

Вы можете отредактировать / 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
David C.

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