powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с сервером по SSH из java
25 сообщений из 34, страница 1 из 2
Работа с сервером по SSH из java
    #39970381
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как пример
https://qarus.ru/11526478-komandy-obolochki-jsch-s-x11forwarding-povtornoe-ispolzovanie-kanala-i-zapusk-novoj-komandy/
есть работоспособный вариант может выполнять несколько команд за раз.
но
проблема в том , чтоб после одной команды дождаться ответа , обработать его и выполнить ещё команду
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970387
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос-то в чём?
Требуется многабукав или что?
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970400
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Вопрос-то в чём?
Требуется многабукав или что?
там проблема - всё в разных сессиях
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970471
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970515
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут другая проблема
делаю так для наглядности
Код: 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
Работа с сервером по SSH из java
    #39970516
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
команды выполняются по очереди в одной сессии, но вывод один в конце
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970551
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать отдельный поток, который будет вычитывать ответ(ы) и (как-то) синхронизировать его с потоком команд вы, конечно, уже попробовали?
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970558
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Создать отдельный поток, который будет вычитывать ответ(ы) и (как-то) синхронизировать его с потоком команд вы, конечно, уже попробовали?
нет
не пробовал.
даже не понимаю с какой стороны подойти с данном случае...
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970559
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может кто другие либы пользовал?
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970560
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, попробуй сделать bash-script который агрегирует всю логику
и собирает коды ошибок в 1 текстовый ответ.

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

И вызывай его.
это не линукс.....
это d-link роутер
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970564
Фотография 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
Работа с сервером по SSH из java
    #39970570
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с сервером по SSH из java
    #39970576
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если каждый раз делать close?
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970598
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с сервером по SSH из java
    #39970599
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970607
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, а ты пробовал тоже самое сделать не через java а через любой ssh клиент?
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970620
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
вадя, а ты пробовал тоже самое сделать не через java а через любой ssh клиент?
первым делом. через PuTTY работает отлично
в доках все описано как и что.

но требуется автоматизация
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970622
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
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
Работа с сервером по SSH из java
    #39970623
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
вадя, а ты пробовал тоже самое сделать не через java а через любой ssh клиент?
первым делом. через PuTTY работает отлично
в доках все описано как и что.

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

Скрипт и есть автоматизация.
Написал, скопировал, вставил.
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970624
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем из 30 строк скрипта ОДНОГО делать 30 отдельных файликов команд?
Зачем построчно отправлять?
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970630
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Скрипт и есть автоматизация.
Написал, скопировал, вставил.
со скриптом не всё просто
в той версии софта что стоит загрузка ещё не предусмотрена
возможности работы команд в скрипте ограничены - нет возможности условий и всего прочего.
нужно после одной из команд дождаться её завершения и выполнить следующую.
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970635
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с сервером по SSH из java
    #39970639
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй еще после каждой команды делать флаш и вычитывать весь input.

Код: java
1.
2.
3.
4.
// Unix
ps.printf("%s\r", command);
ps.flush();
in.readlAllFuckenInput();
...
Рейтинг: 0 / 0
Работа с сервером по SSH из java
    #39970666
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 34, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с сервером по SSH из java
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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