O pulo do gato foi a biblioteca JSCH http://www.jcraft.com/jsch/
Vamos lá, cria um projeto e adicione a biblioteca (obs.: Não estava funcionado na porta diferente da default, peguei o fonte e compilei e fui testar, usando a versão do fonte isso já estava funcionando ok, mas se estiver usando o ssh na porta default, nem se preocupe com isso.
Crie uma classe chamada SSH
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package sshremoto;
import com.jcraft.jsch.*;
import java.io.InputStream;
/**
*
* @author Marcelo Gomes
*/
public class SSH {
private Session session;
private String user;
private String hostname;
private String password;
private int porta;
public SSH(String hostname, String user, String password, int porta) throws JSchException {
this.hostname = hostname;
this.user = user;
this.password = password;
this.porta = porta;
this.iniciaConexao();
}
public SSH(String hostname, int porta) throws JSchException {
this.hostname = hostname;
this.porta = porta;
this.user = "USUARIO";
this.password = "SENHA";
this.iniciaConexao();
}
private void iniciaConexao() throws JSchException {
JSch jsch = new JSch();
session = jsch.getSession(user, hostname, porta);
jsch.setKnownHosts("/home/gomes/.ssh/known_hosts");
jsch.addIdentity("/home/gomes/.ssh/id_rsa");
session.setPassword(password);
session.connect();
}
public void finalizarConexao(){
session.disconnect();
}
public String run(String command) {
String saida = "";
try {
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
//channel.setInputStream(System.in);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) {
break;
}
//System.out.println("-> ");
//System.out.print(new String(tmp, 0, i));
saida = saida.concat(new String(tmp, 0, i));
}
if (channel.isClosed()) {
//System.out.println("111exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
ee.printStackTrace();
}
}
channel.disconnect();
} catch (Exception e) {
System.out.println(e);
}
return saida;
}
}
Em seguida uma outra classe com o nome de SSHRemoto ou qualquer outro nome, com o seguinte conteudo
import com.jcraft.jsch.JSchException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author gomes
*/
public class SSHRemoto {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String host = null;
int porta = 0;
String comando = null;
if(args.length == 3){
try{
host = args[0];
porta = Integer.valueOf(args[1]);
comando = args[2];
}catch(Exception ex){
System.err.println("You need informe IP Door Command");
System.exit(1);
}
}else{
System.err.println("You need informe IP Door Command");
System.exit(1);
}
SSH ssh = null;
try {
ssh = new SSH(host, porta);
System.out.println(ssh.run(comando));
} catch (JSchException ex) {
System.err.println("Erro ao conectar na máquina" + ex.getMessage());
System.exit(1);
}finally{
ssh.finalizarConexao();
}
}
}
Para testar, você deve informar o ip, a porta e o comando que deseja rodar remoto.
Olá, eu gostaria de saber se é possivel somente com essas duas classes, rodar isso no netbeans, eclipse ou outro IDE para estudos, ou se precisaria de mais coisas pra rodar na maquina local.
ResponderExcluirAbraço
Olá Max, da pra rodar em qualquer IDE você só precisa ter a biblioteca JSCH ( http://www.jcraft.com/jsch/).
ExcluirAbraço,
Marcelo Gomes
Não foi isso que eu quiz dizer, acho que me expressei mal. Quiz dizer assim, isso nao serve para eu fazer uma conexão local na minha maquina, digamos, 'estarto' minha classe servidor no IDE e dps meu cliente no mesmo IDE para se conectar ao servidor, entende?
ExcluirNesta implementação estou fazendo apenas o cliente do SSH, neste caso rodei o servidor (http://www.openssh.org/).
ExcluirVocê pode fazer para a propria máquina, basta ter o ssh rodando e colocar o ip da sua máquina (127.0.0.1) ou de qualquer outra máquina que queira conectar.
Se estiver usando linux, me diz a distro que esta usando que faço um tutorial de como instalar/subir o ssh, ou podemos nos falar pelo skype/gtalk meu skype é marcelogomesrp e o gtalk é marcelogomesrp@gmail.com.
abraço
Ok. te adicionei no gtalk para podermos conversar melhor. Grato
ExcluirEste comentário foi removido pelo autor.
ResponderExcluir