Reputation: 371
How can I connect to an SSH server in Java? I don't need/want a shell. I just want to connect to the SSH server and get the content of, say, file.txt
. How can I do that?
Upvotes: 37
Views: 111987
Reputation: 5
I used this and worked for me
ChannelExec channel=(ChannelExec)session.openChannel("exec");
String command = "Your Command here";
channel.setCommand(command);
InputStream in=channel.getInputStream();
channel.setErrStream(System.err);
channel.connect();
Upvotes: -3
Reputation: 51
Not 100% sure but I believe that the sockets have a great deal to do with ssh connections unless you are attempting to do a pre-installed command manipulation application. There are numerous outside packages that you can use to achieve this goal, but if you want to do your own socket creation, it's going to take a large amount of reading and deciphering/encrypting to get this done.
Also creating your own socket is dangerous if not done correctly with the right protocols and security specifications, so be wary about doing so until you are 100% sure you're capable of committing to learning enough.
Upvotes: 0
Reputation: 2057
Use JSch
import com.jcraft.jsch.*;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
/**
* @author World
*/
public class SSHReadFile {
public static void main(String args[]) {
String user = "john";
String password = "mypassword";
String host = "192.168.100.23";
int port = 22;
String remoteFile = "/home/john/test.txt";
try {
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
System.out.println("Connection established.");
System.out.println("Crating SFTP Channel.");
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
System.out.println("SFTP Channel created.");
InputStream inputStream = sftpChannel.get(remoteFile);
try (Scanner scanner = new Scanner(new InputStreamReader(inputStream))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
}
} catch (JSchException | SftpException e) {
e.printStackTrace();
}
}
}
output:
Establishing Connection...
Connection established.
Crating SFTP Channel.
SFTP Channel created.
This is content from file /home/john/test.txt
Upvotes: 51
Reputation: 75426
http://www.ganymed.ethz.ch/ssh2/ implements a ssh2 client in Java. I use it for port forwarding.
Upvotes: 1
Reputation: 47403
You must use a third-party library - JSch is one of them. Google with "Java ssh
" and you will get plenty of other options.
Upvotes: 1
Reputation: 175705
Java doesn't support that natively, but you can use a library like JSch to do it
Upvotes: 5