SSH не может создать каталог /home/USERNAME/.ssh
Мой скрипт выполняет следующую команду:
command = os.system('rdiff-backup --exclude "**.dropbox**" --exclude "**.ini**" --remote-schema "ssh -o UserKnownHostsFile=/cygdrive/c/Users/Adam/.ssh/known_hosts -i /cygdrive/c/Users/Adam/.ssh/id_rsa %s -p1019 rdiff-backup --server" C:/Users/Adam/Dropbox pi@192.168.0.5::/mnt/disk1/Adam/Dropbox')
Как вы можете видеть, я сказал ему, где искать папку known_hosts, и сказал, где находится ключ - без этих двух вопросов меня постоянно спрашивали бы о добавлении моего сервера к known_hosts при каждом выполнении и требовали ввода пароля для каждого выполнения. Жаль, что SSH не смог найти их независимо, я предполагаю, что он всегда работал из одного и того же каталога, C:\Users\Adam\.ssh
?
Anywho, единственное сообщение об ошибке, которое я получаю сейчас, Could not create directory '/home/Adam/.ssh'
- Я убедился, что моя переменная HOME для моего текущего пользователя верна, но все еще не может найти папку.ssh. Сценарий выполняется без проблем, это просто надоедливое сообщение об ошибке. Я использую пакет SSH от Cygwin, я не уверен, насколько это важно? Кроме того, я сгенерировал .ssh
каталог с использованием файла ssh.exe Rsync, а не Cygwin. Это важно?
3 ответа
Я нашел ответ на мои решения в этом блоге.
"Сначала найдите файл с именем passwd
в вашем C:\path\to\cygwin\etc
каталог и откройте его с помощью WordPad. Во-вторых, заменить текст /home/YOUR_NAME
с /cygdrive/c/Documents and Settings/YOUR_NAME
Наконец, сохраните файл. "
Обновить
Некоторые люди сообщают, что добавление%USERPROFILE% в качестве значения к системной переменной с именем "HOME" работает.
Если вы перепробовали все здесь, и ничего не работает, если ваш nssswitch.conf
файл имеет:
db_home: windows
В терминале Cygwin, работающем в режиме администратора, попробуйте:
export CYGWIN=winsymlinks:native
mkdir -p /home/$USER
ln -s $HOME/.ssh /home/$USER
дополнительные детали
В 2015 году Cygwin прекратил создавать /etc/passwd
файл по умолчанию:
Cygwin теперь может генерировать записи passwd / group непосредственно из пользовательских баз данных Windows (локальный SAM или Active Directory), что позволяет запускать Cygwin без необходимости создавать файлы / etc / passwd и / etc / group. Введите файл /etc/nsswitch.conf для настройки обработки passwd / group.
Для пограничного случая, который требует использования файлов / etc / passwd и / etc / group, измените mkpasswd/mkgroup, чтобы сгенерировать записи passwd / group, совместимые с записями, считанными из SAM/AD.
С https://github.com/Alexpux/Cygwin/blob/master/winsup/cygwin/release/1.7.34#L4-L11
Как указано выше mkpasswd
командование и etc/passwd
файл был способом "соединения" с Windows Active Directory.
Если вы используете компьютер компании, использующий Active Directory, иногда где-то вдоль линии Active Directory и / или Cygwin не удается связаться, и вы в конечном итоге теряете запись, которая контролирует, где HOME
каталог установлен. Чтобы проверить этот прогон mkpasswd
и проверьте, отображается ли ваше имя пользователя в списке.
После запуска mkpasswd
и вы не видите свое имя пользователя, по умолчанию, Cygwin's ssh
будет искать .ssh
папка в /home/$USER/.ssh
, Этот каталог не будет существовать, если вы настроите Cygwin с помощью db_home: windows
что указывает на HOME
каталог для C:\Users\$USER
, Таким образом, приведенные выше команды исправляют это:
# Use windows native symlinks (only works in while running as admin)
export CYGWIN=winsymlinks:native
# Create missing directory structure (C:\[Cygwin install directory]\home\$USER)
mkdir -p /home/$USER
# Link C:\User\$USER\.ssh -> C:\[Cygwin install directory]\home\$USER\.ssh
ln -s $HOME/.ssh /home/$USER
Эти команды являются взломом, и реальное решение должно было бы выяснить, почему mkpasswd
не может создать запись для пользователя. Тем не менее, это, вероятно, будет связано с копанием в Active Directory и Cygwin:(.
У меня была та же проблема, и мой $HOME уже был установлен на%USERPROFILE%. Вот что сработало для меня:
Измените строку в файле /etc/nsswitch.conf
чтобы:
db_home: windows cygwin desc
Согласно предложению @MidhunVP, эта ошибка была вызвана для меня через некоторое время после того, как я удалил переменную среды HOME.
Control Panel > Edit Environment Variables > New...
Variable Name: HOME
Variable Value: C:\Users\YOUR_NAME