Question scp dans sh-script avec phrase secrète


J'ai un script sh pour une sauvegarde

scp /mybackupdir/* backupuser@backupserver:/backup

Existe-t-il un moyen simple d’ajouter un mot de passe complexe au scp? Ou dois-je vérifier si un agent ssh est en cours d'exécution, sinon en démarrer un et ajouter la clé?


5
2017-08-20 14:30


origine




Réponses:


Tout d’abord, réglons quelques faits faciles à confondre:

  • SSH (et donc scp) supporte diverses méthodes d'authentification. Les deux plus populaires sont de loin "mot de passe" et "publickey"
  • Si on utilise "publickey", alors le côté client doit avoir un privé et un Publique fichier de clé [1]. le privé on peut ou non être crypté avec une phrase secrète
  • Lorsque la méthode "publickey" est utilisée, ssh-agent peut contenir des clés privées en mémoire. Cela peut être pratique lorsqu'un fichier de clé privée est crypté et que l'on ne veut pas saisir sa phrase secrète à plusieurs reprises. Mais ssh-agent ne nécessite AUCUNE aide lorsque la méthode d'authentification basée sur un mot de passe est utilisée.

Dans le contexte de SSH, quand les gens utilisent le terme ...

  • ... "mot de passe", ils désignent généralement la méthode d'authentification par mot de passe
  • ... "phrase secrète" signifie généralement la phrase secrète dans laquelle un fichier de clé privée est crypté

... mais bien sûr, il ne s'agit que d'une convention et d'une grande source de confusion.


Cela dit, j'essaie de répondre à votre question:

Dans le cas où vous voulez dire authentification SSH basée sur mot de passe:

  • Utilisez un logiciel client qui permet de fournir le mot de passe SSH en mode de traitement par lots (par exemple, en tant qu'option de ligne de commande, en tant que STDIN ou en tant que variable d'environnement). OpenSSH ne supporte pas cela!
  • Ou encapsulez un script 'expect' autour de ssh / scp, comme indiqué dans [2].
  • Ou passez d'une authentification basée sur mot de passe à une authentification publique.

Dans le cas où vous voulez dire une authentification publique avec un fichier de clé privée chiffré avec une phrase secrète:

  • Supprimez la protection par phrase secrète du fichier de clé privée, voir par exemple. [3]
  • Ou préchargez manuellement la clé dans un agent ssh et assurez-vous que (a) l'agent ssh est toujours en vie lors de l'exécution du script et que (b) il peut trouver le socket unix de l'agent ($ SSH_AUTH_SOCK)


6
2017-08-20 16:12



Merci, supprimer le mot de passe est le meilleur moyen, je suppose. - Stephan Weinhold


Vous ne pouvez pas fournir de phrase secrète à scp avec un argument.

Cependant, vous pouvez utiliser l'authentification par clé: ssh-keygen va générer une paire de clés rsa pour l'authentification ssh-copy-id va copier votre clé publique sur un autre hôte.

si vous ne pouvez pas ou ne voulez pas utiliser l'authentification par clé, vous pouvez écrire un script attendu et fournir une phrase secrète à partir de ce script. Ce n'est pas le moyen le plus sûr de mettre cela en œuvre!


6
2017-08-20 14:41



+1 pour cette réponse. Si vous créez une paire de clés personnalisée sans mot de passe à cette fin, il est beaucoup plus facile de authorized_keys. - MadHatter
Oui, je vais enlever le mot de passe. Merci! - Stephan Weinhold


Vous devriez lire ce post:

3 étapes pour effectuer une connexion SSH sans mot de passe à l'aide de ssh-keygen

et vous pouvez changer votre script en ceci:

rsync --rsh='ssh -p(Type your SSH port)' -av /yourBackupDir backupUser@backupserver.example.com:/backup | mail -s "backup on `hostname`" your@email.account

1
2017-08-20 14:55



Résumez le contenu de la page liée - le chargement peut échouer ultérieurement ou un contenu différent. - 89c3b1b8-b1ae-11e6-b842-48d705


Vous n'avez pas besoin de ssh-agent pour l'authentification publique. Vous pouvez simplement passer la clé requise à ssh ou scp avec le -i argument de ligne de commande.


1
2017-08-22 15:54