Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с сервером по SSH из java / 25 сообщений из 34, страница 1 из 2
17.06.2020, 20:44
    #39970381
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
как пример
https://qarus.ru/11526478-komandy-obolochki-jsch-s-x11forwarding-povtornoe-ispolzovanie-kanala-i-zapusk-novoj-komandy/
есть работоспособный вариант может выполнять несколько команд за раз.
но
проблема в том , чтоб после одной команды дождаться ответа , обработать его и выполнить ещё команду
...
Рейтинг: 0 / 0
17.06.2020, 21:06
    #39970387
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
Вопрос-то в чём?
Требуется многабукав или что?
...
Рейтинг: 0 / 0
17.06.2020, 22:26
    #39970400
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
Basil A. Sidorov
Вопрос-то в чём?
Требуется многабукав или что?
там проблема - всё в разных сессиях
...
Рейтинг: 0 / 0
18.06.2020, 11:25
    #39970471
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
...
Рейтинг: 0 / 0
18.06.2020, 13:52
    #39970515
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
тут другая проблема
делаю так для наглядности
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
            channel.connect();
           
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.println("cc Address AddressFolder InterfaceAddresses");
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.println("show IP4Address xxx");
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.close();


получаю
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cc Address AddressFolder InterfaceAddresses
DFL-210:/InterfaceAddresses> [?25l[?25hshow IP4Address xxx
              Property  Value
 ---------------------  -----------
                 Name:  xxx
              Address:  1.1.1.1
       UserAuthGroups:  <empty>
 NoDefinedCredentials:  No
             Comments:  <empty>
DFL-210:/InterfaceAddresses> [?25l[?25h

т.е. никакого анализа после выполнения одной команды
...
Рейтинг: 0 / 0
18.06.2020, 13:52
    #39970516
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
команды выполняются по очереди в одной сессии, но вывод один в конце
...
Рейтинг: 0 / 0
18.06.2020, 15:15
    #39970551
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
Создать отдельный поток, который будет вычитывать ответ(ы) и (как-то) синхронизировать его с потоком команд вы, конечно, уже попробовали?
...
Рейтинг: 0 / 0
18.06.2020, 15:42
    #39970558
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
Basil A. Sidorov
Создать отдельный поток, который будет вычитывать ответ(ы) и (как-то) синхронизировать его с потоком команд вы, конечно, уже попробовали?
нет
не пробовал.
даже не понимаю с какой стороны подойти с данном случае...
...
Рейтинг: 0 / 0
18.06.2020, 15:46
    #39970559
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
может кто другие либы пользовал?
...
Рейтинг: 0 / 0
18.06.2020, 15:47
    #39970560
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
вадя, попробуй сделать bash-script который агрегирует всю логику
и собирает коды ошибок в 1 текстовый ответ.

И вызывай его.
...
Рейтинг: 0 / 0
18.06.2020, 15:51
    #39970562
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
mayton
вадя, попробуй сделать bash-script который агрегирует всю логику
и собирает коды ошибок в 1 текстовый ответ.

И вызывай его.
это не линукс.....
это d-link роутер
...
Рейтинг: 0 / 0
18.06.2020, 16:02
    #39970564
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
вадя

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            channel.connect();
           
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.println("cc Address AddressFolder InterfaceAddresses");
            ps.flush();
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.println("show IP4Address xxx");
            ps.flush();
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.close();



Судя по логу там какая-то сильная буферизация идет. Сделай flush между командами и дождись ответа от предыдущей.
...
Рейтинг: 0 / 0
18.06.2020, 16:16
    #39970570
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
mayton
вадя

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            channel.connect();
           
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.println("cc Address AddressFolder InterfaceAddresses");
            ps.flush();
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.println("show IP4Address xxx");
            ps.flush();
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
            ps.close();




Судя по логу там какая-то сильная буферизация идет. Сделай flush между командами и дождись ответа от предыдущей.
не помогло
...
Рейтинг: 0 / 0
18.06.2020, 16:27
    #39970576
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
А если каждый раз делать close?
...
Рейтинг: 0 / 0
18.06.2020, 17:33
    #39970598
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
mayton
А если каждый раз делать close?


Код: plaintext
1.
2.
3.
4.
5.
6.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Logged in as administrator - admin

DFL-210:/> cc Address AddressFolder InterfaceAddresses
DFL-210:/InterfaceAddresses> [?25l[?25h
выполняется только первая команда

ЗЫ
кто может расшифровать вот это
[?25l[?25h
не понятно откуда и что обозначает
...
Рейтинг: 0 / 0
18.06.2020, 17:36
    #39970599
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
...
Рейтинг: 0 / 0
18.06.2020, 18:07
    #39970607
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
вадя, а ты пробовал тоже самое сделать не через java а через любой ssh клиент?
...
Рейтинг: 0 / 0
18.06.2020, 18:46
    #39970620
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
mayton
вадя, а ты пробовал тоже самое сделать не через java а через любой ssh клиент?
первым делом. через PuTTY работает отлично
в доках все описано как и что.

но требуется автоматизация
...
Рейтинг: 0 / 0
18.06.2020, 18:55
    #39970622
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
вадя
mayton
вадя, а ты пробовал тоже самое сделать не через java а через любой ssh клиент?
первым делом. через PuTTY работает отлично
в доках все описано как и что.

но требуется автоматизация


Есть еще предположение что ты лупишь не тот перевод строки. Он может быть платформо-зависим в java - но хардкожен для Dlink.
https://ru.wikipedia.org/wiki/Перевод_строки

Попробуй варианты
Код: java
1.
2.
3.
4.
5.
// Unix
ps.printf("%s\r", command);
// Win
ps.printf("%s\n\r", command);
// Mac e.t.c.
...
Рейтинг: 0 / 0
18.06.2020, 18:57
    #39970623
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
вадя
mayton
вадя, а ты пробовал тоже самое сделать не через java а через любой ssh клиент?
первым делом. через PuTTY работает отлично
в доках все описано как и что.

но требуется автоматизация

Скрипт и есть автоматизация.
Написал, скопировал, вставил.
...
Рейтинг: 0 / 0
18.06.2020, 18:59
    #39970624
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
Зачем из 30 строк скрипта ОДНОГО делать 30 отдельных файликов команд?
Зачем построчно отправлять?
...
Рейтинг: 0 / 0
18.06.2020, 19:33
    #39970630
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
PetroNotC Sharp
Скрипт и есть автоматизация.
Написал, скопировал, вставил.
со скриптом не всё просто
в той версии софта что стоит загрузка ещё не предусмотрена
возможности работы команд в скрипте ограничены - нет возможности условий и всего прочего.
нужно после одной из команд дождаться её завершения и выполнить следующую.
...
Рейтинг: 0 / 0
18.06.2020, 19:44
    #39970635
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
mayton
Код: java
1.
2.
3.
4.
5.
// Unix
ps.printf("%s\r", command);
// Win
ps.printf("%s\n\r", command);
// Mac e.t.c.


результат тот же
PetroNotC Sharp
Зачем из 30 строк скрипта ОДНОГО делать 30 отдельных файликов команд?
Зачем построчно отправлять?
да есть возможность используя параметр shell
Код: java
1.
2.
3.
4.
Channel channel = session.openChannel("shell");
            channel.setXForwarding(true);
            ByteArrayInputStream reader = new ByteArrayInputStream((command1).getBytes());
            channel.setInputStream(reader);


выполнить такой набор
Код: java
1.
2.
3.
4.
5.
String command1 = """
cc Address AddressFolder InterfaceAddresses
show IP4Address Home
show IP4Address xxx
""";


но это не снимает проблемы с анализом результата работы команды
и отправки следующей в этой же сессии
...
Рейтинг: 0 / 0
18.06.2020, 19:49
    #39970639
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
Попробуй еще после каждой команды делать флаш и вычитывать весь input.

Код: java
1.
2.
3.
4.
// Unix
ps.printf("%s\r", command);
ps.flush();
in.readlAllFuckenInput();
...
Рейтинг: 0 / 0
18.06.2020, 22:12
    #39970666
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с сервером по SSH из java
mayton
Попробуй еще после каждой команды делать флаш и вычитывать весь input.

Код: java
1.
2.
3.
4.
// Unix
ps.printf("%s\r", command);
ps.flush();
in.readlAllFuckenInput();


идея абсолютно правильная!!!
и я её делал.....
но вот только не таким кодом
а вот таким
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 byte[] tmp=new byte[1024];
      while(true){
        while(in.available()>0){
          int i=in.read(tmp, 0, 1024);
          if(i<0)break;
          System.out.print(new String(tmp, 0, i));
        }
        if(channel.isClosed()){
          if(in.available()>0) continue; 
          System.out.println("exit-status: "+channel.getExitStatus());
          break;
        }
        try{Thread.sleep(1000);}catch(Exception ee){}
      }


от сюда http://www.jcraft.com/jsch/examples/Exec.java.html

я не знаю кто первоначальный автор, но это идёт во многих примерах....


как основа может использоваться такой вариант
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            JSch jsch = new JSch();
            Session session = jsch.getSession(USERNAME, HOSTNAME, SSH_PORT);
            session.setPassword(PASSWORD);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect(CONNECTION_TIMEOUT);

            Channel channel = session.openChannel("shell");
            OutputStream ops = channel.getOutputStream();
            try (PrintStream ps = new PrintStream(ops, true)) {
                InputStream in = channel.getInputStream();
                byte[] bt = new byte[1024];
                channel.connect();
                ps.flush();
                Thread.sleep(300);
                while (in.available() > 0) {
                    int i = in.read(bt, 0, 1024);
                    if (i < 0) {
                        break;
                    }
                    String str = new String(bt, 0, i);
                    System.out.print( str);
                }
                ps.print("cc Address AddressFolder InterfaceAddresses\n");
                ps.flush();
                Thread.sleep(300);
                while (in.available() > 0) {
                    int i = in.read(bt, 0, 1024);
                    if (i < 0) {
                        break;
                    }
                    String str = new String(bt, 0, i);
                    System.out.print(str);
                }
                ps.print("show IP4Address xxx\n");
                ps.flush();
                Thread.sleep(300);
                while (in.available() > 0) {
                    int i = in.read(bt, 0, 1024);
                    if (i < 0) {
                        break;
                    }
                    String str = new String(bt, 0, i);
                    System.out.print(str);
                }
            }
            channel.disconnect();
            session.disconnect();
        } catch (JSchException | IOException | InterruptedException ex) {
            Logger.getLogger(Main2.class.getName()).log(Level.SEVERE, null, ex);
        }

...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с сервером по SSH из java / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]