Boa tarde,
Gostaria de uma ajuda para usar o ssh no java, por exemplo a biblioteca nao sei qual que é eu baixei algumas mas nao ta dando certo, e gostaria de saber como q eu faço a conexao se alguem puder me ajudar, quero me conectar a um servidor linux/unix
obrigado
eu sempre usei a biblioteca http://www.ganymed.ethz.ch/ssh2/
ela vem com varios exemplos… bem facil…
Poxa eu to tentando me conecta aqui mas nao estou conseguindo o que estou fazendo de errado?
[code]String hostname = “192.168.0.1”;
String username = “teste”;
String password = “pass”;
Connection conn = new Connection(hostname);
conn.connect();
conn.authenticateWithPassword(username, password);[/code]
Se o seu servidor ssh estiver online e seu usuario e senha estiverem corretos os comandos a seguir devem funcionar
String hostname = "192.168.0.1";
String username = "teste";
String password = "pass";
Connection conn = new Connection(hostname);
conn.connect();
if (conn.authenticateWithPassword(username, password)){
//autenticou
conn.openSession();
conn.execCommand("ls -l");
conn.close;
}
Já usei o jsch… nao tem mta documentação e é meio complicado de usar… mas seguindo normalmente dá para fazer o que precisa…
Bem nao consigo fazer funcionar alguem pode me ajudar. estou usando o seguinte codigo
[code] String hostname = “192.168.0.93”;
String username = “teste”;
String password = “teste”;
Connection conn = new Connection(hostname);
conn.connect();
if (conn.authenticateWithPassword(username, password)){
System.out.println("entrou");
conn.openSession();
conn.close();
}[/code]
mas qual erro tá dando? coloca a excessao ai
Exception in thread "main" java.io.IOException: There was a problem while connecting to 192.168.0.1:22
at ch.ethz.ssh2.Connection.connect(Connection.java:699)
at ch.ethz.ssh2.Connection.connect(Connection.java:490)
at linux.Conexao.getConexao(Conexao.java:15)
at linux.Main.main(Main.java:12)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
at ch.ethz.ssh2.Connection.connect(Connection.java:643)
... 3 more
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
caraa… na hora da conexão o java não está conseguindo encontrar seu host …
no terminal do linux vc consegue a conexão com esses dados mesmo? é esse ip mesmo?
a porta do ssh é a 22?
eh sim cara =(
mas o sintaxe esta toda certa?
tem como trocar a porta de acesso por comando java
o java esta tentando a conexao com esse dados : 192.168.0.1 na porta 22
da um conferida ai… no seu codigo o ip do host tá diferente
A sintaxe tá certinha… o código é esse mesmo …
se tá tudo certo com seus dados de conexao … entao pode ser alguma configuração no seu servidor SSH que esta bloqueando esse tipo de conexao.
eu sei ta certo estou tentando conectar em uma vm
vc pode tentar reiniciar o servidor ssh … as vezes isso dá certo
Vou mandar todo meu programa
[code]import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Main {
public static void main(String[] args) throws IOException {
Conexao c = new Conexao();
c.getConexao();
System.out.println(“conexaofeita”);
File file = new File("/etc/passwd");
FileInputStream fi = new FileInputStream(file);
Scanner scan = new Scanner(fi);
String str = JOptionPane.showInputDialog("Usuario");
String readLine="";
String conteudo = "";
while (scan.hasNext()) {
readLine = scan.next();
if(readLine.contains(str)){
conteudo += "#"+readLine+"\r\n";
}
else
conteudo+=readLine+"\r\n";
}
fi.close();
FileOutputStream fo = new FileOutputStream(file,false);
fo.write(conteudo.getBytes());
fo.close();
}
}[/code]
[code]import ch.ethz.ssh2.Connection;
import java.io.IOException;
public class Conexao
{
public Connection getConexao() throws IOException{
String hostname = "192.168.0.93";
String username = "md2";
String password = "md2net";
Connection conn = new Connection(hostname);
conn.connect();
if (conn.authenticateWithPassword(username, password)){
System.out.println("entrou");
conn.openSession();
}
return conn;
}
}[/code]
aiiii … rodei seu codigo aqui… conectou certinhoooo…
acho que seu problema é a VM … mas ai já não entendo muito…
mas por não estar encontrando o host de conexão a VM não deve estar configurada na mesma rede que vc …
mas seu codigo de conexao do ssh tá certo… rodei e testei aqui
velhoo muito obrigado se voce puder fazer mais um teste pra mim eu ficaria muito agradecido.
criar um usuario no linux e digitar o nome dele para ver se meu programa vai comentar a linha e assim bloquear o usuario
não testei, mas só de olhar deu pra perceber que não vai da certo…
se quiser mecher na maquina linux vai ter usar os comandos unix dentro da sessao do ssh depois do : conn.openSession();
vc pode usar o conn.execCommand(“cd \etc\passwd”);
o comando File file = new File("/etc/passwd"); vai criar um arquivo na sua maquina e não no linux…
para trocar arquivos entre as maquinas vc pode usar o ftp …
espero ter ajudado !!
[quote=ninjasauro]não testei, mas só de olhar deu pra perceber que não vai da certo…
se quiser mecher na maquina linux vai ter usar os comandos unix dentro da sessao do ssh depois do : conn.openSession();
vc pode usar o conn.execCommand(“cd \etc\passwd”);
o comando File file = new File("/etc/passwd"); vai criar um arquivo na sua maquina e não no linux…
para trocar arquivos entre as maquinas vc pode usar o ftp …
espero ter ajudado !![/quote]
Vc ajudou muito, mais um pergunta eu quero por exemplo listar os usuarios do linux e comentar as linhas daqueles que eu digitar, como vou fazer?
Tem certeza que você precisa fazer isto pelo java? Me parece que esta tarefa é uma responsabilidade do administrador do linux…
Mas a sugestão que posso deixar é a seguinte: faça parte da sua programação em shell linux e use seu programa java para disparar estas rotinas.