Necesito usar sshpass
para iniciar un comando remoto a través de SSH desde un código Java.
Si escribo manualmente en una consola:
ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
funciona perfectamente, pero pide contraseña. Entonces intenté correr 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'
y ninguno de ellos funciona.
fuente
StrictHostKeyChecking=accept-new
.sshpass
solo funciona si la solicitud de contraseña termina enassword:
.Si su solicitud de contraseña es diferente, es posible que tenga que ajustar el código fuente de
sshpass
para reconocer la solicitud que tiene.He visto mensajes de contraseña como
Password for user@host:
en algunos sistemas, quizás este sea tu problema.fuente
-P prompt Which string should sshpass search for to detect a password prompt
Creo que quieres algo como:
Por ejemplo, esto funciona para mí:
fuente
¿Configuró inicio de sesión sin contraseña?
Inicios de sesión sin contraseña con OpenSSH http://www.debian-administration.org/articles/152
fuente
Hay muchas maneras de hacerlo, aquí está mi solución sugerida:
En primer lugar, almacenar su contraseña en una variable es darle comandos más flexibles.
sshpass
tiene una opción para eso:-e
: esta opción permite leer la contraseña de$SSHPASS
la variable de entornoTiene dos formas de establecer esta variable:
Establecer directamente en su código:
O pídalo:
Que ejecutar su comando;
Si su comando es estático, ejecútelo directamente:
Si su comando será dinámico, use así:
Espero que esto ayude a alguien.
fuente
readPassword
función, solo puede escribir su contraseña, debería funcionar :) Solo quiero compartir mi código, que muestra un ejemplo usandosshpass
comandos dinámicos: Dsshpass
usa pseudo terminales y laman
página incluye disculpas por romperse ocasionalmente. También puedes intentarlofd0ssh
. Funciona si no necesita enviarstdin
a un proceso en la máquina remota. Eso funciona si solo emite un comando y captura el resultado.fuente
La sintaxis de sshpass es
Tenga en cuenta que no hay espacio entre -p y la contraseña.
También he notado que debe conectarse con ssh al menos una vez manualmente para obtener la clave RSA de la máquina a la que se está conectando, para
~/.ssh/known_hosts
acceder al archivo antes de que sshpass le permita conectarse.así que después de obtener la entrada en el archivo known_hosts puedo ejecutar un comando como
y ejecutará el comando
uname -a
en el servidor remoto y enviará los resultados a la salida estándar en la máquina local.fuente
Lo que necesitas es
-f -t -t -t
Además, es posible que deba eliminar "requiretty" de sudo config (/ etc / sudoers) en la máquina remota.
fuente
hacer una llave
ssh-keygen -t rsa
haga una carpeta .ssh en el servidor remoto, le pedirá una contraseña
ssh $USER@SEVERNAME mkdir -p .ssh
copiar la clave al servidor remoto
cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'
Verifique si solicita una contraseña, de lo contrario debería funcionar.
fuente
@exhuma tenía un ejemplo que lo llevó a funcionar para mí.
La contraseña debe estar en forma de
-pPassword
(sin el espacio)También pueden ser necesarias citas:
sshpass -p'Password&0' user@hostname
fuente