"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".
Что может быть ошибкой?
Нашел другой подобный вопрос, но не ответ.
Спасибо заранее.
Ответы
Ответ 1
Отслеживая основную причину, я наконец обнаружил, что открытый ключ типа dsa не добавляется к авторизованным ключам на удаленном сервере. Добавление того же сработало для меня.
ssh работал с ключом rsa, заставляя меня оглянуться назад в моем коде.
Спасибо всем.
Ответ 2
Пример, когда я получаю файл с удаленного сервера и сохраняю его на локальном компьютере
пакетный разъем;
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();
}
}
Ответ 3
Если имя пользователя/пароль содержит какие-либо специальные символы, то внутри конфигурации верблюда используйте RAW для настройки значений типа
Используя RAW, я решил проблему.
http://camel.apache.org/how-do-i-configure-endpoints.html
Ответ 4
Нашел другой похожий вопрос, но не ответ.
Было бы интересно узнать, где вы нашли этот вопрос.
Насколько я помню и в соответствии с com.jcraft.jsch.JSchException: отменить отмену
попробуйте добавить к методу .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;
}
Ответ 5
Я также сталкиваюсь с проблемой Auth Fail, проблема с моим кодом заключается в том, что у меня есть
channelSftp.cd("");
Он изменил его на
channelSftp.cd(".");
Затем он работает.
Ответ 6
Попробуйте явно добавить метод аутентификации, как показано ниже, потому что иногда это требуется:
session.setConfig("PreferredAuthentications", "password");
Ответ 7
в моем случае я использовал ниже зависимости
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.42</version>
</dependency>
и получение того же исключения из Auth завершилось неудачно, но обновленная зависимость до версии ниже и проблема была решена.
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>