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.
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.
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.
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.
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
.