Pergunta

Scenerio: Eu gostaria de executar comandos em máquinas remotas de um programa Java sobre ssh (estou usando OpenSSH em minha máquina de desenvolvimento). Eu também gostaria de fazer a ligação ssh, passando a senha em vez de criação de chaves como eu faria com 'espera'.
Problema: Ao tentar fazer o 'espera' como senha de login do processo que é criado com ProcessBuilder não consigo ver a senha rápida. Ao executar comandos regulares não-ssh (por exemplo 'ls') posso obter os fluxos e interagir com eles muito bem. Estou combinando erro padrão e fora padrão em um córrego com redirectErrorStream(true); por isso não estou faltando-lo em erro padrão ... Quando eu executar ssh com a opção '-v', vejo toda a exploração madeireira no fluxo, mas eu não ver o prompt. Esta é a minha primeira vez tentando usar ProcessBuilder para algo como isto. Eu sei que seria mais fácil de usar Python, Perl ou bom ol' esperar, mas meu chefe quer utilizar o que estamos tentando voltar (arquivos e scripts em execução remota de log) dentro de um programa Java existente assim que eu sou o tipo de preso.

Agradecemos antecipadamente pela ajuda!

Foi útil?

Solução

O prompt só poderia ser mostrada quando ssh está conectado a um TTY, o que não é, no caso de Java.

Há provavelmente uma maneira de fornecer a senha na linha de comando em sua aplicação ssh. Essa será a maneira de superar o prompt.

Como alternativa, considere a conexão direta com o servidor host a partir do código Java nativo ao invés de executar um aplicativo externo. Há um milhão de bibliotecas que vai fazer isso.

Outras dicas

Ao invés de usar um programa ssh externo, por que não usar uma biblioteca ssh Java:

Tem dois que eu encontrei com o Google - que vai evitar o problema que openssh estará trabalhando muito duro para evitar digitar a senha em stdin - que vai ser a abertura do terminal diretamente. espera tem que trabalhar muito duro para simular um tty, a fim de trabalho.

plugue: consulte este exemplo de execução de um comando sobre ssh usando sshj

Por que não usar um cliente ssh Java? Este é BSD-licenciados, e há mais clientes listados aqui .

programas espírito maioria de segurança não usar stdin / stdout para capturar senhas, eles capturam o TTY ou algum método equivalente.

Eu usei o cliente ssh trilead com muito sucesso. Eu também tentei jsch (outro cliente SSH java) e tunelamento para o cliente ssh nativa sob linux. Trilead foi de longe o melhor.

Dê uma olhada no muito recentemente lançado SSHD , que é baseado no projeto Apache MINA .

sugestão Echoing outros para usar uma biblioteca Java SSH. Mas queria comentar sobre a resposta de Cohen. Enviando sua senha em cima da linha de comando no estabelecimento da ligação é inseguro e também não é permitido por muitos servidores sshd (com base na configuração).

Você pode querer olhar para a criação de chaves para isso, então você pode executar comandos ssh entre as máquinas sem uma senha.

Passos básicos - utilização openssh para criar um par de chaves (eu fiz RSA, mas eu sei que há um método melhor agora) - criar um diretório .ssh em sua pasta pessoal na máquina de origem - criar um diretório .ssh em sua pasta pessoal na máquina de destino - manter sua chave privada na pasta .ssh da sua máquina de origem - copiar sua chave pública em um arquivo chamado authorized_keys no alvo é .ssh pasta

Algumas instruções podem ser encontradas aqui

Você pode executar comandos usando edtFTPj / PRO , bem como a realização transferências de arquivos via SFTP. É Java.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top