Je dois utiliser sshpass
pour lancer une commande à distance via SSH à partir d'un code Java.
Si je tape manuellement dans une console:
ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
fonctionne parfaitement, mais demande un mot de passe. J'ai donc essayé de courir sshpass
:
sshpass -p mypass ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -l user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -t user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh user@ipaddress echo 'OK'
et aucun d'eux ne fonctionne.
la source
StrictHostKeyChecking=accept-new
.sshpass
ne fonctionne que si l'invite de mot de passe se termineassword:
.Si l'invite de votre mot de passe est différente, vous devrez peut-être ajuster le code source de
sshpass
pour reconnaître l'invite que vous avez.J'ai vu des invites de mot de passe comme
Password for user@host:
sur certains systèmes, c'est peut-être votre problème.la source
-P prompt Which string should sshpass search for to detect a password prompt
Je pense que vous voulez quelque chose comme:
Par exemple, cela fonctionne pour moi:
la source
Avez-vous configuré une connexion sans mot de passe?
Connexions sans mot de passe avec OpenSSH http://www.debian-administration.org/articles/152
la source
Il y a beaucoup de façons de le faire, voici ma solution suggérée:
Tout d'abord, le stockage de votre mot de passe dans une variable vous donne des commandes plus flexibles.
sshpass
a une option pour cela:-e
: cette option permet de lire le mot de passe de$SSHPASS
la variable d'environnementVous avez deux façons de définir cette variable:
Définissez directement dans votre code:
Ou demandez-le:
Ensuite, exécutez votre commande;
Si votre commande est statique, exécutez-la directement:
Si votre commande sera dynamique, utilisez comme ceci:
j'espère que cela aide quelqu'un.
la source
readPassword
fonction, vous pouvez simplement écrire votre mot de passe, il devrait fonctionner :) Je veux seulement partager mon code qui montre un exemple en utilisantsshpass
des commandes dynamiques: Dsshpass
utilise des pseudo-terminaux et laman
page comprend des excuses pour les coupures occasionnelles. Vous pouvez également essayerfd0ssh
. Cela fonctionne si vous n'avez pas besoin d'envoyerstdin
à un processus sur la machine distante. Cela fonctionne si vous émettez simplement une commande et capturez le résultat.la source
la syntaxe sshpass est
Notez qu'il n'y a pas d'espace entre le -p et le mot de passe.
J'ai également remarqué que vous devez vous connecter avec ssh au moins une fois manuellement pour obtenir la clé RSA de la machine à laquelle vous vous connectez, pour accéder au
~/.ssh/known_hosts
fichier avant que sshpass vous permette de vous connecter.donc après avoir obtenu l'entrée dans le fichier known_hosts, je peux exécuter une commande telle que
et il exécutera la commande
uname -a
sur le serveur distant et restituera les résultats à la norme sur la machine locale.la source
Ce dont vous avez besoin c'est
-f -t -t -t
De plus, vous devrez peut-être supprimer "require" de la configuration sudo (/ etc / sudoers) sur la machine distante.
la source
faire une clé
ssh-keygen -t rsa
créer un dossier .ssh sur le serveur distant il vous demandera un mot de passe
ssh $USER@SEVERNAME mkdir -p .ssh
copier la clé sur le serveur distant
cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'
Vérifiez s'il demande un mot de passe, sinon cela devrait fonctionner.
la source
@exhuma avait un exemple qui l'a amené à fonctionner pour moi.
Le mot de passe doit être sous forme de
-pPassword
(sans l'espace)des citations peuvent également être nécessaires:
sshpass -p'Password&0' user@hostname
la source