63 votes

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

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

J'ai un bash script qui fait un dump de la BD puis copie le fichier d'un serveur à un autre mais il demande toujours le mot de passe avant la connexion.

scp file.tar.gz root@xxx.xxx.xxx.194:/backup

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

98voto

Coding With Style Points 752

Utiliser l'outil sshpass

sshpass -p 'password' scp file.tar.gz root@xxx.xxx.xxx.194:/backup

45voto

user9517 Points 113163

Plutôt que d'utiliser la racine, créez un compte juste pour ce travail. Utilisez des clés publiques sans phrase de passe plutôt que des mots de passe.

scp -i /home/backupuser/.ssh/id_rsa backupuser@xxx.xxx.xxx.194:/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.

4voto

cjc Points 24265

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

Jetez un coup d'oeil :

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. Quand il vous demande une phrase de passe, appuyez sur ENTER 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 second serveur en utilisant ssh-copy-id user@server2 . Ceci ajoutera la clé publique au fichier authorized_keys de l'utilisateur sur le serveur2.

Vous devriez maintenant être en mesure d'exécuter ssh depuis la première machine et de vous connecter sans mot de passe.

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

3voto

Jared Points 762

scp utilise SSH pour se connecter à un serveur distant et transférer des fichiers. SSH peut authentifier les utilisateurs avec un mot de passe, un SSH ou les deux (recommandé).

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

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

N'oubliez pas que le compromis SSH Les clés sans mot de passe sont identiques aux mots de passe compromis - n'importe qui peut y accéder. Pour les utilisateurs réels, il est préférable de doubler la sécurité et d'exiger la clé et un mot de passe.

3voto

Journeyman Geek Points 6949

pscp vous permet de lui passer le mot de passe directement en utilisant l'argument -pw. Alternativement, et c'est une meilleure idée, utilisez l'agent ssh et configurez une connexion basée sur une clé - c'est plus sûr. Il existe un guide pour configurer ssh afin d'utiliser une connexion basée sur une clé. connexion aquí

Vous pouvez utiliser le oui pour envoyer un oui au programme.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X