java - error received disconnect from com jcraft jsch jschexception auth fail preauth
"Com.jcraft.jsch.JSchException: Auth fail" con contraseñas de trabajo (6)
Encontré otra pregunta similar, pero no la respuesta.
Habría sido interesante saber dónde encontraste esta pregunta.
Por lo que puedo recordar y de acuerdo con com.jcraft.jsch.JSchException: Aut. De cancelación, intente agregar al método .addIdentity()
una frase de contraseña. Puede usar ""
en caso de que haya generado un archivo de claves sin uno. Otra fuente de error es la cadena de huellas dactilares. Si no coincide, obtendrá un error de autenticación (depende del servidor de destino).
Y por fin, aquí está mi código fuente de trabajo, después de que pude resolver las feas tareas de administración:
public void connect(String host, int port,
String user, String pwd,
String privateKey, String fingerPrint,
String passPhrase
) throws JSchException{
JSch jsch = new JSch();
String absoluteFilePathPrivatekey = "./";
File tmpFileObject = new File(privateKey);
if (tmpFileObject.exists() && tmpFileObject.isFile())
{
absoluteFilePathPrivatekey = tmpFileObject.getAbsolutePath();
}
jsch.addIdentity(absoluteFilePathPrivatekey, passPhrase);
session = jsch.getSession(user, host, port);
//Password and fingerprint will be given via UserInfo interface.
UserInfo ui = new UserInfoImpl(pwd, fingerPrint);
session.setUserInfo(ui);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
c = (ChannelSftp) channel;
}
Al intentar cargar el archivo en nuestro servidor, obtengo la siguiente excepción
com.jcraft.jsch.JSchException: Auth fail
at com.jcraft.jsch.Session.connect(Session.java:464)
at com.jcraft.jsch.Session.connect(Session.java:158)
at FtpService.transferFileToReciever(FtpService.java:80)
at FtpService.transferFileToReciever(FtpService.java:54)
at FtpService.transferFileToRecievers(FtpService.java:44)
at FtpService.transferSingeFile(FtpService.java:241)
at FtpService.main(FtpService.java:26)
Auth fail
La parte de la función transferFileToReciever del archivo fuente es
JSch jsch = new JSch();
jsch.addIdentity("/root/.ssh/id_dsa");
Session session = jsch.getSession(username, host, 22);
session.setUserInfo(serverinfo);
session.connect(); //geting exception here
boolean ptimestamp = true;
Las contraseñas funcionan, ya que puedo iniciar sesión usando ssh, pero usar JSCh no funciona incluso con clave, nombre de usuario y contraseña. Usando la clave id_dsa con la versión java "1.6.0_25". ¿Cuál podría ser el error?
Encontré otra pregunta similar, pero no la respuesta. Gracias por adelantado.
Al rastrear la causa raíz, finalmente encontré que la clave pública de tipo dsa no se agrega a las claves autorizadas en el servidor remoto. Anexando lo mismo funcionó para mí.
El ssh estaba trabajando con rsa key, causando que mirara hacia atrás en mi código.
gracias a todos.
Caso de ejemplo, cuando obtengo el archivo del servidor remoto y lo guardo en la máquina local
conector de paquete;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class Main {
public static void main(String[] args) throws JSchException, SftpException, IOException {
// TODO Auto-generated method stub
String username = "XXXXXX";
String host = "XXXXXX";
String passwd = "XXXXXX";
JSch conn = new JSch();
Session session = null;
session = conn.getSession(username, host, 22);
session.setPassword(passwd);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
ChannelSftp channel = null;
channel = (ChannelSftp)session.openChannel("sftp");
channel.connect();
channel.cd("/tmp/qtmp");
InputStream in = channel.get("testScp");
String lf = "OBJECT_FILE";
FileOutputStream tergetFile = new FileOutputStream(lf);
int c;
while ( (c= in.read()) != -1 ) {
tergetFile.write(c);
}
in.close();
tergetFile.close();
channel.disconnect();
session.disconnect();
}
}
Intente agregar el método de autenticación explícitamente como se muestra a continuación, porque a veces es necesario:
session.setConfig("PreferredAuthentications", "password");
Si el nombre de usuario / contraseña contiene caracteres especiales, dentro de la configuración de camello use RAW para configurar los valores como
RAW(se+re?t&23)
dondese+re?t&23
es la contraseña realRAW({abc.ftp.password})
donde los valores de{abc.ftp.password}
provienen de un archivo de propiedades spring.
Al usar RAW, resolví mi problema.
También he enfrentado el problema de Fallo de autenticación, el problema con mi código es que tengo
channelSftp.cd("");
Lo cambió a
channelSftp.cd(".");
Entonces funciona.