web-dev-qa-db-fra.com

Ssh n'a pas pu créer un répertoire /home/username/.ssh

Mon script exécute la commande ci-dessous:

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 [email protected]::/mnt/disk1/Adam/Dropbox')

Comme vous pouvez le constater, je l'ai dit où chercher le dossier connu_hosts et l'a dit où la clé était - sans ces deux questions, je serais constamment interrogée sur l'ajout de mon serveur à connaître, chacun et être requis pour entrer le mot de passe. , pour chaque exécution. C'est une honte SSH ne pouvait pas les localiser de manière indépendante, mon hypothèse est qu'elle a toujours fonctionné à partir du même répertoire, C:\Users\Adam\.ssh?

Anywho, le seul message d'erreur que je reçois maintenant est Could not create directory '/home/Adam/.ssh' - J'ai assuré ma variable à domicile pour que mon utilisateur actuel soit correct, mais il n'arrive toujours pas à trouver le dossier .sh. Le script n'exécute aucun problème, c'est juste ce message d'erreur ennuyeux. J'utilise le paquet SSH de Cygwin, je ne suis pas sûr à quel point cela est important? En outre, j'ai généré le .ssh Répertoire utilisant le fichier SSH.EXE de RSYNC, pas Cygwin's. Est-ce important?

7
adampski

J'ai trouvé la réponse à mes solutions dans ce blog post .

"Premier localiser le fichier appelé passwd dans votre C:\path\to\cygwin\etc répertoire et ouvrez-le avec WordPad. Deuxièmement, remplacez le texte /home/YOUR_NAME avec /cygdrive/c/Documents and Settings/YOUR_NAME Enfin, enregistrez le fichier. "


Mettre à jour

Certaines personnes ont signalé que l'ajout de% userProfile% en tant que valeur pour une variable système appelée "Accueil" fonctionne.

11
adampski

Pour ces tumumweeds de 2019 si vous avez tout essayé ici et que rien ne fonctionne si votre nssswitch.conf Dossier a:

db_home: windows

Dans un terminal Cygwin exécutant en mode administrateur, essayez:

export CYGWIN=winsymlinks:native
mkdir -p /home/$USER
ln -s $HOME/.ssh /home/$USER

Détails supplémentaires

En 2015, Cygwin a cessé de créer un /etc/passwd Fichier par défaut:

Cygwin peut désormais générer des entrées passwd/groupe directement à partir de bases de données utilisateur Windows (Sam local ou Active Directory), permettant ainsi d'exécuter Cygwin sans avoir à créer/etc/etc/etc/groupe de fichiers. Introduisez le fichier /etc/nsswitch.conf pour configurer la manutention de Passwd/Group.

Pour Bordingcase qui nécessitent d'utiliser/etc/passwd et/etc/Group de fichiers, modifiez mkpasswd/mkgroup pour générer des entrées passwd/groupe compatibles avec les entrées en lecture de SAM/AD.

De https://github.com/alexpux/cygwin/blob/master/winSup/cygwin/release/1.7.34#l4-l11

Comme indiqué ci-dessus mkpasswd commande et le etc/passwdfile était un moyen de "connecter" avec Windows Active Directory.

Si vous utilisez un ordinateur d'entreprise utilisant Active Directory, parfois quelque part le long de la ligne Active Directory et/ou Cygwin omettez pour communiquer et vous finissez par perdre l'entrée qui contrôle dans lequel le répertoire HOME est défini. Pour tester cette exécution mkpasswd et vérifier si votre nom d'utilisateur apparaît dans la liste.

Après avoir exécuté mkpasswd et vous ne voyez pas votre nom d'utilisateur, par défaut, Cygwin's ssh recherchera le .ssh Dossier en /home/$USER/.ssh. Ce répertoire n'existe pas si vous configurez Cygwin avec db_home: windows qui pointe le répertoire HOME à C:\Users\$USER. Donc, les commandes ci-dessus corrigent ceci par:

# 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

Ces commandes sont un piratage et la solution réelle impliquerait de déterminer pourquoi mkpasswd _ ne permet pas de créer une entrée pour l'utilisateur. Cependant, cela impliquerait probablement de creuser à la fois dans Active Directory et Cygwin :(.

2
ksrb