Возможности весьма впечатляют: аворизация по ключам, порт-форвардинг, соединение через прокси и ещё много чего. Также обрадовала простота работы с библиотекой. Вот, к примеру, реализация удалённой консоли в три десятка строк:
import com.jcraft.jsch.*;
import javax.swing.*;
public class Shell {
public static void main(String[] arg) {
try {
JSch jsch = new JSch();
String connstr = null;
if (arg.length > 0) {
connstr = arg[0];
} else {
connstr = JOptionPane.showInputDialog("Enter username:password@hostname", System.getProperty("user.name")+":<pass>"+"@localhost");
}
String user = connstr.substring(0, connstr.indexOf(':'));
String pass = connstr.substring(connstr.indexOf(':')+1, connstr.indexOf('@'));
String host = connstr.substring(connstr.indexOf('@') + 1);
Session session = jsch.getSession(user, host, 22);
session.setPassword(pass);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
Channel channel = session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
} catch (Exception e) {
System.out.println(e);
}
}
}
Тут мы делаем следующее:
- Получаем от пользователя настройки подключения (как параметр вызова или диалоговым окном)
- Создаём сессию и устанавливаем соединение
- Создаём Channel (в данном случае для интерактивного исполнения команд, хотя есть и другие варианты)
- "Заворачиваем" системные потоки ввода и вывода в полученный канал
- наслаждаемся :)
библиотека не развивается с 2009 года
ОтветитьУдалитьпример не рабочий, попробуй написать сам, а не брать примеры с офсайта
Рад что вас заинтересовала моя статья двухлетней давности :)
УдалитьНа счёт "библиотека не развивается" смотрим сюда: http://www.jcraft.com/jsch/ChangeLog, обращаем внимание на строку "Last modified: Thu May 9 06:30:51 UTC 2013".
На счёт "не рабочий" звучит как-то слишком неопределённо. Что именно не получается? Скомпилировать? Запустить? Есть ошибки при установке соединения?
На счёт "не брать примеры с офсфйта" во-первых глупо не использовать примеры при изучении библиотеки, а во вторых, если "написать сам", то пост будет уже не о Jsch а о том что я "написал сам".
А если мне хочется вводить не через System.in, а скажем из JTextArea как реализовать тогда ввод данных?
ОтветитьУдалитьну так нарисуй гуйцы, сделай jtextarea, сделай кнопку и повесь на неё листенер - при нажатии считать данные(getText, рекомендую ещё проверять на правильность ввода) и передай в класс.
Удалитьи вообще здесь мейн только для примера.
http://developer-remarks.blogspot.ru/2013/05/ssh-via-jsch-example.html
ОтветитьУдалитьХороший пример, как реализовать ввод данных не через System.in