63 votes

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

Possible Duplicate:
Se connecter via SSH et taper le mot de passe automatiquement, sans utiliser de clé publique

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

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

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

2 votes

1 votes

1 votes

98voto

Coding With Style Points 752

Utilisez l'outil sshpass

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

14 votes

Il ne s'agit pas d'une partie standard d'OpenSSH, et littéralement aucune de mes machines (Mac OS X 10.7, Ubuntu 12.04, FreeBSD 8, Debian 3.1) ne l'ont. C'est également la réponse acceptée fournie à la question dont celle-ci est marquée comme un doublon...

6 votes

Excellent! La sécurité n'est pas toujours une préoccupation, comme lors du développement multiplateforme d'une boîte à l'intérieur du pare-feu. Sur les systèmes avec apt-get, installez avec sudo apt-get install -y sshpass

6 votes

OK, pour ajouter une sécurité supplémentaire, considérez sshpass -f fichier_avec_mot_de_passe. Ensuite, sécurisez les permissions du fichier mot de passe, faites-le fonctionner, puis lisez quelques conseils "intelligents" sur la façon dont l'utilisation de sshpass est mauvaise, et authorized_keys est super. Surtout, lorsque quelqu'un vous donne juste un login+mot de passe (par exemple pour SFTP), et aucune option pour autoriser votre clé publique...

45voto

user9517 Points 113163

Au lieu d'utiliser le compte root, créez un compte dédié uniquement à cette tâche. Utilisez des clés publiques sans phrase secrète au lieu de 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 ne exposez pas votre mot de passe root.

3 votes

+1 pour avoir mentionné la création d'un compte spécifique pour les téléversements de fichiers au lieu d'utiliser root. Et je recommande également d'utiliser un shell restreint comme rssh pour cet utilisateur.

15 votes

-1 pour ne pas avoir répondu à la question.

1 votes

+relever une autre solution au problème posé même si cela ne répond pas littéralement à la question.

4voto

cjc Points 24265

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

Jetez un œil à :

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

Donc, essentiellement, exécutez ssh-keygen -t dsa sur la machine qui exécutera votre script. Lorsqu'on vous demande une passphrase, appuyez sur ENTRÉE pour accepter un espace vide. 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 en utilisant ssh-copy-id user@server2. Cela ajoutera la clé publique au fichier authorized_keys de l'utilisateur sur server2.

Maintenant, vous devriez pouvoir exécuter SSH depuis la première machine et vous connecter sans mot de passe.

Pour copier les fichiers, scp ou rsync sont bien. Cela dépend de ce que vous faites. rsync utilisera SSH par défaut, donc utilisera l'authentification basée sur une 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, 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 (il n'est pas recommandé d'utiliser root, utilisez plutôt un utilisateur non privilégié et ayez une tâche 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 clés SSH (également dans le lien ci-dessus).

Gardez à l'esprit que des clés SSH compromises sans mot de passe sont identiques à des mots de passe compromis - n'importe qui peut accéder. Pour les vrais utilisateurs, 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 transmettre directement le mot de passe en utilisant l'argument -pw. En revanche, et c'est une meilleure idée, utilisez l'agent SSH et configurez une connexion basée sur une clé - c'est plus sécurisé. Il y a un tutoriel sur la configuration de SSH pour utiliser une connexion basée sur une clé ici

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

0 votes

Cela a été une excellente solution au problème de transfert des clés SSH sur 16 machines virtuelles, la plupart des réponses se contentent de dire "utilisez des clés", ce qui nous oblige à nous connecter manuellement à chaque serveur pour ajouter une clé quand nous devons les configurer en grands groupes. Exécuter ceci dans Bash sur Windows ressemble à PSCP.EXE -l $username -pw $password localflie "$HOST:/tmp/remotefile"

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