leer example ejecutar desde descargar conexion comando archivo java ssh openssh

example - leer archivo sftp java



Ejecutando comandos sobre ssh con Java (9)

Scenerio: me gustaría ejecutar comandos en máquinas remotas desde un programa Java a través de ssh (estoy usando OpenSSH en mi máquina de desarrollo). También me gustaría establecer la conexión ssh pasando la contraseña en lugar de configurar las claves como lo haría con ''esperar''.
Problema: Al intentar hacer la contraseña de ''esperar'', el proceso creado con ProcessBuilder parece no poder ver la solicitud de contraseña. Cuando ejecuto comandos normales que no son ssh (por ejemplo, ''ls'') puedo obtener las secuencias e interactuar con ellas sin problemas. Estoy combinando error estándar y estándar en una secuencia con redirectErrorStream(true); así que no me lo estoy perdiendo en el error estándar ... Cuando ejecuto ssh con la opción ''-v'', veo todo el registro en la transmisión, pero no veo el mensaje. Esta es la primera vez que intento usar ProcessBuilder para algo como esto. Sé que sería más fácil usar Python, Perl o un buen viejo pero mi jefe quiere utilizar lo que estamos tratando de recuperar (archivos de registro remotos y secuencias de comandos en ejecución) dentro de un programa Java existente, así que estoy algo atrapado.

Gracias de antemano por la ayuda!


¿Por qué no usar un cliente Java ssh? Éste tiene licencia de BSD, y hay más clientes enumerados aquí .


El aviso solo se puede mostrar cuando ssh está conectado a un TTY, lo que no ocurre en el caso de Java.

Probablemente haya una forma de proporcionar la contraseña en la línea de comandos de su aplicación ssh . Esa será la forma de superar el aviso.

Alternativamente, considere conectarse directamente al servidor host desde el código nativo de Java en lugar de ejecutar una aplicación externa. Hay un millón de bibliotecas que harán esto.


En lugar de utilizar un programa ssh externo, ¿por qué no utilizar una biblioteca Java ssh?

Son dos los que encontré en google, eso evitará el problema de que openssh estará trabajando muy duro para evitar ingresar la contraseña en stdin; abrirá la terminal directamente. esperar tiene que trabajar muy duro para simular una tty para poder trabajar.


La mayoría de los programas con mentalidad de seguridad no usan stdin / stdout para capturar contraseñas, capturan el TTY o algún otro método equivalente.


Utilicé el cliente trilead ssh con mucho éxito. También probé jsch (otro cliente java ssh) y el túnel al cliente ssh nativo bajo linux. Trilead fue de lejos el mejor.


Puede ejecutar comandos usando edtFTPj / PRO , así como realizar transferencias de archivos a través de SFTP. Es Java.


Echa un vistazo a SSHD , recientemente lanzado, que se basa en el proyecto Apache MINA.


enchufe: vea este ejemplo de ejecutar un comando sobre ssh usando sshj


Haciéndose eco de la sugerencia de los demás de utilizar una biblioteca Java SSH. Pero quería comentar sobre la respuesta de Cohen. Enviar su contraseña a través de la línea de comando cuando se establece la conexión es inseguro y tampoco está permitido por muchos servidores sshd (según la configuración).

Es posible que desee buscar la configuración de claves para esto, por lo que puede realizar comandos ssh entre las máquinas sin una contraseña.

Pasos básicos : use openssh para crear un par de llaves (lo he hecho con RSA pero ahora sé que hay un método mejor) - cree un directorio .ssh en su carpeta de inicio en la máquina SOURCE - cree un directorio .ssh en su carpeta de inicio en el Máquina TARGET: mantenga su clave privada en la carpeta .ssh de su máquina de origen. Copie su clave pública en un archivo llamado authorized_keys en la carpeta .ssh del destino.

Algunas instrucciones se pueden encontrar aquí