Necesito usar sshpasspara 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.sshpasssolo 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
sshpasspara 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 promptCreo 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.
sshpasstiene una opción para eso:-e: esta opción permite leer la contraseña de$SSHPASSla 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
readPasswordfunción, solo puede escribir su contraseña, debería funcionar :) Solo quiero compartir mi código, que muestra un ejemplo usandosshpasscomandos dinámicos: Dsshpassusa pseudo terminales y lamanpágina incluye disculpas por romperse ocasionalmente. También puedes intentarlofd0ssh. Funciona si no necesita enviarstdina 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_hostsacceder 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 -aen 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 -tAdemás, es posible que deba eliminar "requiretty" de sudo config (/ etc / sudoers) en la máquina remota.
fuente
hacer una llave
ssh-keygen -t rsahaga una carpeta .ssh en el servidor remoto, le pedirá una contraseña
ssh $USER@SEVERNAME mkdir -p .sshcopiar 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@hostnamefuente