Como ler o banner par de sig-chave SSH (para gerar a senha SSH) depois de conectar-se ao host em java?

Eu quero ler o banner par de sig-chave SSH (para gerar a senha SSH) depois de se conectar a um host remoto em java. Estou usando a biblioteca cliente JSch para conexões SSH.

A senha do SSH muda depois de certas operações no host, portanto, sempre que preciso gerar uma nova senha SSH do par de sig-chave para efetuar login.

Existe uma maneira que eu possa ler o banner programaticamente?

Abaixo está um trecho do banner do par de sig-chave que aparece com o prompt de senha ao tentar o SSH através do console do cliente (PuTTY).

NbwDZIAGjGS90zisB + jY9Kqrmu67PyMwas6S6jY68f + QL4l + TJDyHWUTGtzluflwY + z / bHn0mXtdIkgxsoiVm5nCnNi0viMUKq / dPygXEZ0uDma9Co0WHI25UNLn525pNSuT1At5wTEEinH7xKiypIKDNVxxeprshtsd4rcirTUQveTBEbAgABJtzHrSNHmqs2Rui4NbWRqFDabft4uID6qwtl5wxAoNhh0Z9FT1r3kCK0FoLxcp9nlyQ6kD2rmp1sQG1SvQky2ATa9sD + ZBBAhlvwbOns5fWRE8A + ElQtkvyB8IxCS59cWa8T5rXm7G57x9uExEn57Vn3ZBuKP9Tg == bS6VdF5I167P03QMkM88k2cwS9KtyEfgT6Ff2e0iIvxdBMSKq453953J // vuriZk + mKjiEX0 / RzrQSVIAzOYXFTtsZrIh7ER2IS0LoaXQ5izk4aobVq3BtiU + EknM3Qcy7IpVbwmQ7ZmCmjtOL + Ux / n8vEDLYdk8dVeFJpzp4s53MrRkm4RC9yHgROW6HJxYscmQa + xah5ymRJyC2mt4aFfeQjAUZIEBhncLQge6nGEMybXmail1bgqhinE5xem + K6M2Ad3 + 0ahhW7NflWC4LjweTSHfsItfDwsb8i280LuYuw6w07LTadkn40AfpnVXOiFM + eUpUeIkw16RzduCew ==

A mensagem (que você chama “SSH key-sig pair banner”) pode vir como um banner de autenticação SSH ou como um prompt de autenticação interativo do teclado SSH. Não pode ser um prompt de autenticação por senha, pois não é personalizável por um servidor SSH.

Em ambos os casos, para capturar a mensagem, implemente a interface UserInfo . E associe-o à instância da Session usando o método Session.setUserInfo .

  • Para capturar o banner de autenticação, implemente o método UserInfo.showMessage . Observe que o JSch chama esse método para outras mensagens (internas) também, não apenas para o banner. Então você tem que verificar se você recebeu a mensagem que está procurando.

  • Para capturar o prompt interativo do teclado, sua implementação UserInfo deve implementar também a interface UIKeyboardInteractive e seu método UIKeyboardInteractive.promptKeyboardInteractive . A mensagem pode vir em name , instruction ou argumentos de prompt . Você tem que descobrir a si mesmo.


Para testar rapidamente como o servidor está enviando a mensagem, tente se conectar ao cliente WinSCP SFTP e verifique como ele exibe a mensagem.

  • como um banner :

    insira a descrição da imagem aqui

  • ou como um prompt interativo de teclado ?

    insira a descrição da imagem aqui

    O “Server Prompt” no título é o que você recebe no name . A instruction seria renderizada abaixo de “Usando autenticação interativa com teclado” (não há “instruções” neste prompt). E o “O desafio é …” é o prompt[0] (há apenas um “prompt” neste caso, mas pode haver mais).