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.