problemas de jsch session.connect ()

Eu sou novo no Jsch e estou tentando conectar-me a terceiros através do sftp. Posso conectar-me através do ssh para saber se tenho o usuário, host, porta e arquivo de chave privados corretos, mas quando tento conectar-me através do Jsch, recebo a mensagem de exceção "Falha na autenticação", que é quase, mas não muito útil. Aqui está o meu código que reuni a partir de exemplos online:

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());
             }

Eu adicionei alguns logs para que eu saiba que a falha está acontecendo como session.connect (). Eu peguei o usuário e o connectionURL e verifiquei que eles estão sendo transmitidos corretamente. O caminho para o pvtkey e known_hosts é o caminho unix completo para onde eu seguro a chave e hospeda os arquivos, que eu mudei para um diretório que contém o script que inicia esse processo. Ainda sou um pouco novo no sftp, minha chave pública precisa estar no mesmo diretório, mesmo que não a esteja adicionando à conexão Jsch? Existe alguma maneira de obter mais informações sobre minha falha?

obrigado

Resposta 1

Sim, se você estiver usando autenticação de chave pública, JSch estará esperando o arquivo de chave pública no mesmo diretório (e mesmo nome com um acréscimo .pub) que o arquivo de chave privada ao qual você passou como parâmetro addIdentity(). Como alternativa, você pode usar a variante de método que aceita os nomes de arquivos como parâmetros ou os passa como matrizes de bytes.

O motivo é que, no protocolo de autenticação de chave pública SSH, o cliente envia primeiro uma lista das chaves públicas disponíveis para o servidor, e o servidor seleciona uma adequada - somente então a chave privada é necessária (e será descriptografada, se necessário). Embora seja possível calcular a chave pública a partir da chave privada (dependendo do algoritmo e da representação da chave), o JSch não faz isso por si só, portanto você precisará fornecer as duas chaves.

Resposta: 2

desde que você está usando

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

você não precisa de nenhum arquivo de chave. Desativa a verificação da chave do host. Você pode mostrar o que o log possui após a execução do programa. para que possamos ajudá-lo.

Resposta: 3

Eu sempre achei isso problemático, essencialmente um ponteiro nulo garantido na maioria dos casos. Digamos que temos um ArrayList bidimensional, assim: ArrayList <ArrayList <Integer>> outer; ...

Eu li o Java Concurrency in Practice e fico com esta pergunta: quando eu uso um ConcurrentHashMap, quais problemas de simultaneidade de dados discutidos na Parte Um do livro ainda preciso me preocupar ...

Eu tenho um leitor de arquivos, que retorna as linhas de um arquivo como um objeto []. Eu estou usando o método de linhas. Seria mais rápido usar o readAllLines? Não uso o fluxo para mais nada, mas quero ...

Eu tenho que baixar um arquivo xml do servidor usando o navegador IE. response.setContentType ("application / octet-stream"); response.setHeader ("Content-Disposition", "attachement; filename = xyz.xml"); ...