"com.jcraft.jsch.JSchException: auth fail " с рабочими паролями
при попытке загрузить файл на нашем сервере, я получаю следующее исключение
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
часть функции transferFileToReciever из исходного файла является
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;
пароли работают, так как я могу войти в систему с помощью ssh, но с помощью JSCh он не работает даже при наличии ключа, имени пользователя и пароля. Использование ключа id_dsa с версией java "1.6.0_25". В чем может быть ошибка?
нашли другой подобный вопрос, но не ответ. Спасибо предварительно.
6 ответов
отслеживая первопричину, я, наконец, обнаружил, что открытый ключ типа dsa не добавляется к авторизованным ключам на удаленном сервере. Добавление того же самого сработало для меня.
ssh работал с ключом rsa, заставляя меня оглядываться назад в моем коде.
спасибо всем.
пример случай, когда я получаю файл с удаленного сервера и сохранить ее в локальной машине
соединитель пакета;
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();
}
}
нашли другой подобный вопрос, но не ответ.
было бы интересно узнать, где вы нашли этот вопрос.
насколько я помню и по com.jcraft.jsch.JSchException: Auth отмена
попробуйте добавить в метод .addIdentity()
пароль. Вы можете использовать ""
в случае, если вы создали файл ключа без него.
Другим источником ошибок является строка отпечатков пальцев. Если он не соответствует, вы получите ошибка проверки подлинности (зависит от целевого сервера).
и наконец-то здесь мой рабочий исходный код-после того, как я смог решить уродливые задачи администрирования:
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;
}
Я также сталкиваюсь с проблемой сбоя Auth, проблема с моим кодом в том, что у меня есть
channelSftp.cd("");
Он изменил его на
channelSftp.cd(".");
тогда это работает.
если имя пользователя / пароль содержит какие-либо специальные символы, то внутри конфигурации camel используйте RAW для настройки значений, таких как
RAW(se+re?t&23)
здесьse+re?t&23
это реальный парольRAW({abc.ftp.password})
здесь{abc.ftp.password}
значения поступают из файла свойств spring.
используя RAW, решил мою проблему.
попробуйте добавить метод auth явно, как показано ниже, потому что иногда это требуется:
session.setConfig("PreferredAuthentications", "password");