Je dois créer un script qui saisit automatiquement un mot de passe sur le ssh
client OpenSSH .
Disons que j'ai besoin de SSH myname@somehost
avec le mot de passe a1234b
.
J'ai déjà essayé ...
#~/bin/myssh.sh
ssh myname@somehost
a1234b
... mais cela ne fonctionne pas.
Comment puis-je intégrer cette fonctionnalité dans un script?
ps -aux
, vous ne devriez normalement pas exécuter de commandes en tapant votre mot de passe car d'autres utilisateurs sur le même ordinateur peuvent voir le mot de passe en exécutantps -aux
. si possible, vous souhaitez également utiliser l'authentification par clé publique à la place, comme mentionné dans l'autre réponse. cela vous permet de séparer les informations d'authentification de votre script afin que vous puissiez partager votre script avec d'autres sans souci, et ensuite décider d'activer le chiffrement sur votre dossier ~ / .ssh sans chiffrer également votre script.sshpass
.Après avoir cherché une réponse à la question pendant des mois, j'ai finalement trouvé une meilleure solution: écrire un script simple.
Mettez-le
/usr/bin/exp
, alors vous pouvez utiliser:exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
Terminé!
la source
Utilisez l'authentification par clé publique: https://help.ubuntu.com/community/SSH/OpenSSH/Keys
Dans l'hôte source, exécutez ceci une seule fois:
C'est tout, après cela, vous pourrez faire ssh sans mot de passe.
la source
Vous pouvez utiliser un script attend. Je n'en ai pas écrit depuis un certain temps mais cela devrait ressembler à ci-dessous. Vous devrez diriger le script avec
#!/usr/bin/expect
la source
/bin/myssh.sh: 2: spawn: not found /bin/myssh.sh: 3: expect: not found /bin/myssh.sh: 4: send: not found /bin/myssh.sh: 5: expect: not found /bin/myssh.sh: 6: send: not found
which expect
#!/usr/bin/env expect
interact
à la fin pour que la session ssh soit réellement interactiveVariante I
Variante II
la source
-p
indicateur sert à spécifier un numéro de port.SYNOPSIS sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
yum -y install epel-release
puisyum -y install sshpass
sshpass + autossh
Un avantage appréciable du déjà mentionné
sshpass
est que vous pouvez l'utiliser avecautossh
, éliminant encore plus l'inefficacité interactive.Cela permettra la reconnexion automatique si, par exemple, votre wifi est interrompu en fermant votre ordinateur portable.
la source
-f
pour autossh dans cette combinaison, carwhen used with autossh, ssh will be *unable* to ask for passwords or passphrases.
harding.motd.ca/autossh/README.txt aussi superuser.com/questions/1278583/…sshpass
avec une meilleure sécuritéJe suis tombé sur ce fil en cherchant un moyen de ssh dans un serveur enlisé - il a fallu plus d'une minute pour traiter la tentative de connexion SSH et a expiré avant que je puisse entrer un mot de passe. Dans ce cas, je voulais être en mesure de fournir mon mot de passe immédiatement lorsque l'invite était disponible.
(Et si ce n'est pas très clair: avec un serveur dans cet état, il est bien trop tard pour configurer une connexion par clé publique.)
sshpass
à la rescousse. Cependant, il existe de meilleures façons de procéder quesshpass -p
.Mon implémentation passe directement à l'invite de mot de passe interactive (pas de temps perdu à voir si l'échange de clé publique peut avoir lieu) et ne révèle jamais le mot de passe sous forme de texte brut.
la source
trap
pour empêcher ctrl-C de divulguer laSSHPASS
variablePreferredAuthentications=keyboard-interactive
cela ne fonctionnait pas, mais le remplacer parPreferredAuthentications=password
fonctionnait.C'est ainsi que je me connecte à mes serveurs.
#! / bin / bash
sshpass -p mypassword racine ssh @ $ 1
Et donc...
la source
référence: https://www.linkedin.com/pulse/youre-doing-wrong-ssh-plain-text-credentials-robert-mccurdy?trk=mp-reader-card
la source
Je ne pense pas avoir vu qui que ce soit suggérer cela et le PO a juste dit "script" alors ...
J'avais besoin de résoudre le même problème et mon langage le plus confortable est Python.
J'ai utilisé la bibliothèque paramiko. En outre, je devais également émettre des commandes pour lesquelles j'aurais besoin d'autorisations augmentées en utilisant
sudo
. Il s'avère que sudo peut accepter son mot de passe via stdin via le drapeau "-S"! Voir ci-dessous:J'espère que cela aide quelqu'un. Mon cas d'utilisation était la création de répertoires, l'envoi et la suppression de fichiers et le démarrage de programmes sur environ 300 serveurs à la fois. En tant que tel, l'automatisation était primordiale. J'ai essayé
sshpass
,expect
puis j'ai trouvé ça.la source
Je l'ai fait fonctionner comme suit
.ssh / config a été modifié pour éliminer l'invite oui / non - je suis derrière un pare-feu donc je ne suis pas inquiet des clés ssh usurpées
Créez un fichier de réponses pour expect ie answer.expect
Créez votre script bash et appelez simplement expect dans le fichier
Obtient 128 codes de données hadoop actualisés avec une nouvelle configuration - en supposant que vous utilisez un montage NFS pour les fichiers hadoop / conf
J'espère que cela aide quelqu'un - je suis un Windows numpty et cela m'a pris environ 5 heures à comprendre!
la source
Si vous faites cela sur un système Windows, vous pouvez utiliser Plink (qui fait partie de PuTTY).
la source
J'ai une meilleure solution qui inclut la connexion avec votre compte que le passage à l'utilisateur root. C'est un script bash
http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/
la source
La réponse de @abbotto n'a pas fonctionné pour moi, a dû faire certaines choses différemment:
la source
J'ai réussi à le faire fonctionner avec ça:
la source
Dans l'exemple ci-dessous, j'écrirai la solution que j'ai utilisée:
Le scénario: je souhaite copier un fichier à partir d'un serveur à l'aide du script sh:
la source
Utilisez ce script tossh dans le script, le premier argument est le nom d'hôte et le second sera le mot de passe.
la source
Pour connecter une machine distante via des scripts shell, utilisez la commande ci-dessous:
où
IPADDRESS
,USERNAME
etPASSWORD
sont les valeurs d'entrée qui doivent être fournies dans le script, ou si nous voulons fournir au moment de l'exécution, utilisez la commande "read".la source
StrictHostKeyChecking=no
sans en expliquer les conséquences.appuyez sur la touche Entrée, puis entrez le mot de passe de votre système, puis entrez enfin le mot de passe de votre serveur
la source