Conexão SSH

3 respostas
L

Olá pessoal,

estou tentando executar uma sequência de comandos via SSH - shell (estou utilizando a API jsch), mas não estou obtendo sucesso.
Já tentei rodar todos os exemplos que encontrei pelo google, já tentei adaptar e nada…
Alguém já fez algo parecido e pode me ajudar?
Eu consigo conectar e executar comandos utilizando o channel do tipo shell, mas não sei se realmente estão funcionando, também não consigo imprimir o resultado, pois o método de exemplo da API parece estar bugado e também não consegui arrumar de forma a imprimir os resultados. Talvez esteja ocorrendo algum erro na execução do comando…
Qualquer dica ou exemplo é bem vindo.
Obrigado.

3 Respostas

F

Opa, ja fiz um codigo assim, mas usei a lib do j2ssh.

StringBuilder sb = new StringBuilder();
		HostKeyVerification host = new IgnoreHostKeyVerification();
		SshClient sclient = new SshClient();
    	sclient.connect(ipServer,defaultPort,host);

    	PasswordAuthenticationClient auth = new PasswordAuthenticationClient();
    	auth.setUsername(sshLogin);
    	auth.setPassword(sshPasswd);
    	
    	int result = sclient.authenticate(auth);
    	
    	if(result == AuthenticationProtocolState.COMPLETE){
	    	SessionChannelClient session = sclient.openSessionChannel();
	    	session.requestPseudoTerminal("ansi", 1024, 48, 0, 0, null);
	    	if(session.startShell()){
	    		for (String comand : comands) {
	    			session.getOutputStream().write((comand+"\n").getBytes());	
				}
	    		session.getOutputStream().write("exit\n".getBytes());
		    	BufferedReader sx = new BufferedReader(new InputStreamReader(session.getInputStream()));
		    	
		    	String t = null;
		    	while((t = sx.readLine()) != null){
		    		sb.append(t).append("\n");
		    	}
	    	session.close();
    	}else{
    		switch (result) {
			case AuthenticationProtocolState.FAILED:
				System.out.println("FAIL");
				break;
			case AuthenticationProtocolState.CANCELLED:
				System.out.println("CANCELLED");
				break;
			case AuthenticationProtocolState.PARTIAL:
				System.out.println("PARTIAL");
				break;
			case AuthenticationProtocolState.READY:
				System.out.println("READY");
				break;
			default:
				break;
			}
    	}
    		
    	sclient.disconnect();
    	
    	}
    	return sb.toString();

Esse codigo ele conecta na maquina e executa uma lista de comandos e se tiver alguma saida desses comando ele salva no stringbuilder.
Espero ter ajudado.

L

Obrigado,
vou testar com essa API e código postado.
Depois divulgo o resultado!
[]´s

L

Fiz os testes aqui e consegui executar com seu exemplo e também através dele descobri meu erro.
Estava faltando apenas um “\n” no final dos comandos e a leitura do inputStream deve ser feita somente após executar todos os comandos…
Perdi um tempão por isso, mas agora foi…
Valeu pela ajuda ai
[]´s

Criado 18 de maio de 2010
Ultima resposta 19 de mai. de 2010
Respostas 3
Participantes 2