web-dev-qa-db-fra.com

Connexion SSH avec mot de passe en texte clair comme paramètre?

Je dois me connecter à un utilisateur que j'ai créé sur un hôte distant exécutant Ubuntu. Je ne peux pas utiliser une clé ssh car la connexion ssh se fera à partir d'un script bash exécuté sur un serveur auquel je n'aurai pas accès (pensez à un serveur d'intégration continue comme Bamboo).

Je comprends que ce n'est pas une pratique idéale, mais je veux soit configurer l'hôte distant pour qu'il ne demande pas le mot de passe, soit pouvoir se connecter avec quelque chose comme ssh --passsword foobar user@Host, un peu comme MySQL vous permet de faire pour les connexions.

Je ne trouve pas ça dans man ssh et je suis ouvert à toute alternative pour contourner ce problème.

93
mmla

Sur Ubuntu, installez le package sshpass, puis utilisez-le comme ceci:

sshpass -p 'YourPassword' ssh user@Host

sshpass prend également en charge la transmission du mot de passe interactif au clavier à partir d'un fichier ou d'une variable d'environnement, ce qui pourrait être une option plus appropriée dans toute situation où la sécurité est pertinente. Voir man sshpass pour les détails.

160
likeitlikeit

Si votre alternative est de mettre un mot de passe dans un script ou une ligne de commande ssh ou un fichier texte brut, alors vous êtes [~ # ~] beaucoup [~ # ~] mieux vaut utiliser une touche ssh à la place. Quoi qu'il en soit, toute personne ayant accès au compte où le script client ssh est stocké pourra l'utiliser pour accéder au serveur, mais au moins dans le cas d'une clé ssh, OpenSSH le supporte correctement, vous n'accordez pas l'accès par d'autres moyens que ssh, il est plus facilement révoqué si nécessaire, etc ...

Vous devrez expliquer pourquoi vous devez ne pas utiliser de clé ssh.

Pensez également à utiliser une commande forcée (command="..." dans le .ssh/authorized_keys file) afin que le client ait uniquement accès à l'exécution de la commande dont il a besoin sur le serveur plutôt qu'un shell complet.

16
Celada

Tout d'abord, comme les autres répondants, je recommande simplement d'utiliser les clés ssh. Mais je suppose que la personne contrôlant le serveur ne va tout simplement pas vous autoriser à utiliser l'authentification par clé ssh et vous devez utiliser l'authentification par mot de passe.

Vous pouvez utiliser ControlMaster et ControlPath.

Soit A le serveur auquel vous n'aurez pas accès (pensez au serveur d'intégration continue comme Bamboo) et C l'hôte distant exécutant Ubuntu.

Maintenant, laissez B être un ordinateur que vous contrôlez. Si vous ne pouvez pas fournir un ordinateur B approprié, cette réponse ne fonctionnera pas.

  1. Créez une paire de clés et ajoutez la partie publique au fichier authorized_keys de B. Donnez à A la clé privée. Vous pouvez maintenant vous connecter à B depuis A sans mot de passe.
  2. Sur B manuellement ssh -M -S /tmp/controlpath C et entrez votre mot de passe à l'invite. Après cela, vous devriez pouvoir vous connecter à C à partir de A sans mot de passe ssh -S /tmp/controlpath C.

Dans le script sur A, vous pouvez écrire ssh B ssh C dostuff.

Chaque fois que vous redémarrez B, vous devrez rétablir la connexion ssh -M -S /tmp/controlpath C.

10
emory