web-dev-qa-db-fra.com

Comment passer le mot de passe à la commande scp utilisée dans le script bash?

Duplicata possible:
Connectez-vous via SSH et saisissez automatiquement le mot de passe, sans utiliser de clé publique

J'ai un script bash qui fait un vidage de la base de données puis copie le fichier d'un serveur à un autre mais il demande toujours un mot de passe avant la connexion.

scp file.tar.gz [email protected]:/backup

Existe-t-il un moyen de passer le mot de passe directement dans le script?

43
chubbyk

Utilisez l'outil sshpass

sshpass -p 'password' scp file.tar.gz [email protected]:/backup 
68
GGarciaBas

Plutôt que d'utiliser root, créez un compte uniquement pour ce travail. Utilisez des clés publiques sans phrase de passe au lieu de mots de passe.

scp -i /home/backupuser/.ssh/id_rsa [email protected]:/backup

En utilisant un compte spécial pour la sauvegarde sur le système de destination, vous n'exposez pas votre mot de passe root.

41
user9517

pscp vous permet de lui passer directement le mot de passe en utilisant l'argument -pw. Alternativement, et c'est une meilleure idée, utilisez l'agent ssh et configurez la connexion basée sur les clés - c'est plus sûr. Il y a un guide sur la configuration de ssh pour utiliser la clé logon ici

Vous pouvez utiliser la commande yes pour envoyer un oui au programme.

3
Journeyman Geek

Il est préférable de configurer ssh pour une authentification par clé utilisée plutôt que d'essayer de comprendre comment envoyer du texte au processus de connexion avec quelque chose comme expect.

Jeter un coup d'œil à:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys

Donc, en gros, exécutez ssh-keygen -t dsa sur la machine qui exécutera votre script. Lorsqu'il vous demande une phrase secrète, appuyez sur ENTRÉE pour accepter un blanc. Vous obtiendrez deux fichiers. Si vous avez suivi les suggestions par défaut, les fichiers seront ~/.ssh/id_dsa et ~/.ssh/id_dsa.pub. Le premier est la clé privée. Le second est la clé publique.

Copiez la clé publique sur le deuxième serveur à l'aide de ssh-copy-id user@server2. Cela ajoutera la clé publique au fichier authorized_keys de l'utilisateur sur server2.

Vous devriez maintenant pouvoir exécuter ssh à partir de la première machine et vous connecter sans mot de passe.

Pour copier les fichiers, scp ou rsync conviennent. Cela dépend de ce que vous faites. rsync utilisera ssh par défaut, il utilisera donc l'authentification par clé que vous venez de configurer.

3
cjc

Vous ne devez pas utiliser les clés ssh sans mot de passe pour des raisons de sécurité.

L'outil keychain peut vous aider à réutiliser l'agent ssh et à exécuter rsync sur ssh dans les scripts sans être invité à saisir des mots de passe.

Pour l'installer sur une machine Ubuntu, exécutez simplement la commande suivante.

Sudo apt-get install keychain

Consultez la page de manuel du troussea pour plus d'informations sur son utilisation.

2
pkhamre

scp utilise SSH pour créer un tunnel vers un serveur distant et transférer des fichiers. SSH peut authentifier les utilisateurs avec un mot de passe, une clé SSH ou les deux (recommandé).

Pour transférer des fichiers sans mot de passe, créez une clé SSH pour l'utilisateur que vous allez utiliser (la racine est pas recommandé, utilisez un utilisateur non privilégié à la place et ayez un travail sur le serveur cible en tant que root pour effectuer l'action privilégiée).

Ensuite, vous devez configurer le démon SSH du système cible pour accepter les connexions par clé SSH (également dans le lien ci-dessus).

Gardez à l'esprit que les clés SSH compromises sans mot de passe sont les mêmes que les mots de passe compromis - tout le monde peut y entrer. Pour les vrais utilisateurs, il est préférable de doubler la sécurité et d'exiger la clé et un mot de passe.

1
Andy