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
Другие вопросы по тегам