example - Conexión SFTP a través de Java solicitando autenticación extraña
ssh java (2)
Pensé que publicaría una respuesta aquí, en caso de que alguien más se encuentre con un problema similar. Resulta que me falta un fragmento de código que marca la diferencia. Solo necesitaba agregar
session.setConfig("PreferredAuthentications",
"publickey,keyboard-interactive,password");
antes de
session.connect();
y todo funciona perfectamente ahora
Así que estoy escribiendo un pequeño programa que necesita conectarse a un servidor remoto a través de SFTP, desplegar un archivo y luego procesar el archivo. Me encontré con JSch a través de algunas respuestas aquí y parecía perfecto para la tarea. Hasta ahora, es fácil de usar y lo tengo funcionando, con una cosa menor que me gustaría solucionar. Estoy usando el siguiente código para conectar y tirar el archivo:
JSch jsch = new JSch();
Session session = null;
try {
session = jsch.getSession("username", "127.0.0.1", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("password");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.cd(REMOTE_FTP_DIR);
sftpChannel.lcd(INCOMING_DIR);
sftpChannel.get(TMP_FILE, TMP_FILE);
sftpChannel.exit();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
Entonces esto funciona y obtengo el archivo. Estoy ejecutando este código en un servidor Linux y cuando ejecuto el código, JSch me pide mi nombre de usuario y contraseña de Kerberos. Parece que:
Nombre de usuario de Kerberos [george]:
Contraseña de Kerberos para george:
Solo presiono ingresar para ambas preguntas y luego el programa parece continuar sin problemas. Sin embargo, necesito que este código se automatice a través de una tarea cron y, por lo tanto, prefiero no tener que pausar el programa para hacerme estas dos preguntas. ¿Hay algo que no estoy suministrando para que no pregunte esto? ¿Algo que necesito hacer para evitar que pregunte? Espero que alguien tenga algunas ideas. Gracias.
Si bien la solución en la respuesta auto aceptada es correcta, carece de cualquier explicación.
El problema es que el OP tiene un conjunto de autenticación Kerberos / GSSAPI como el preferido (el valor predeterminado de JSch). Sin embargo, OP parece no usarlo / quererlo, ya que OP afirma no especificar ningún nombre de usuario o contraseña para las solicitudes de Kerberos.
La solución es eliminar Kerberos / GSSAPI ( gssapi-with-mic
) de la lista de métodos de autenticación preferidos:
session.setConfig(
"PreferredAuthentications",
"publickey,keyboard-interactive,password");