2012-05-17 2 views
3

Я новичок в Jsch, и я пытаюсь подключиться к третьей стороне через sftp. Я могу подключиться через ssh, поэтому я знаю, что у меня есть правильный пользовательский, хост, порт и файл закрытого ключа, но когда я пытаюсь подключиться через Jsch, я получаю сообщение об ошибке «Auth failed», которое почти, но не совсем полезно. Вот мой код, который я кусочки из примеров онлайн:Проблемы с jsch session.connect()

String pvtkey = "{unixpath}/id_dsa"; 
ChannelSftp sftp = null; 
JSch jsch = new JSch(); 
Session session = null; 



    try{ 
     jsch.setKnownHosts("{unixpath}/known_hosts"); 
     jsch.addIdentity(pvtkey); 
     session = jsch.getSession(user, connectionURL, 22); 
     Properties config = new Properties(); 
     config.put("StrictHostKeyChecking", "no"); 
     session.setConfig(config); 
     session.connect(); 
        ...some other code that never gets called 
      }catch(JSchException e){ 
       log.info(e.getMessage()); 
       log.error(e.getCause()); 
      } 

Я добавил некоторые журналы, так что я знаю, что сбой происходит в session.connect(). Я поймал пользователя и подключениеURL и подтвердил, что они передаются должным образом. Путь к pvtkey и known_hosts - это полный путь unix к тому, где я храню файлы ключей и хостов, которые я переместил в каталог, в котором хранится сценарий, который запускает этот процесс. Я все еще немного новичок в sftp, мой открытый ключ должен быть в том же каталоге, даже если я не добавляю его в Jsch-соединение? Есть ли способ получить больше информации о моем провале?

Благодаря

ответ

0

Да, если вы используете открытый ключ аутентификацию, JSch ожидает открытый ключа файл в том же каталоге (и то же имя с добавлением .pub) в качестве файла закрытого ключа, переданных в качестве параметр - addIdentity(). Кроме того, вы можете использовать the method variant which takes both file names as parameters или передать их в виде массивов байтов.

Причина в том, что в протоколе аутентификации открытого ключа SSH клиент сначала отправляет список доступных открытых ключей на сервер, а сервер из них выбирает подходящий - только тогда необходим частный ключ (и будут дешифрованы, если необходимо). Хотя он (в зависимости от алгоритма и представления ключа) может быть доступен для вычисления открытого ключа из частного, JSch не делает этого сам, поэтому вам нужно будет предоставить оба ключа.

0

, так как вы используете

config.put("StrictHostKeyChecking", "no"); 

вам не нужен какой-либо keyfiles.It отключает HOSTKEY checking.Can вы показываете, что делает журнал уже после выполнения program.so, что мы могли бы помочь вам.

Смежные вопросы