Перейти к основному содержанию
`Ctrl`+`K`

# SSH-консоль сервера

Global 3 SE Server включает в себя SSH-сервер (Secure Shell), к которому можно подключиться с помощью любого SSH-терминала. С помощью командной строки можно:

- Просматривать статистику, логи и управлять клиентскими сессиями.

- Перезагружать код прикладных приложений.

- Перезапускать веб-приложения.

- Выполнять SQL- и Jexl-скрипты.

## Конфигурирование

Конфигурационный файл `global3.config.xml` может содержать секцию `<ssh/>`:

    <ssh defaultDb="PostgreSql" port="22"/>

- `defaultDb` — алиас базы данных по умолчанию. Используется как значение параметра по умолчанию для команды `login`. По имени базы определяются имя и пароль пользователя для подключения к базе.

- `port` — порт SSH-сервера.
  По умолчанию: `22`.
  Значение может быть задано через JVM-опцию:

      -Dglobal.ssh.port=xxxx

  или через параметр командной строки при запуске сервера Global 3:

      -global.ssh.port xxxx

Учётные данные пользователей, имеющих права на SSH-подключения, указываются в секции `<security>` конфигурационного файла `global3.config.xml`:

    <security>
      <users>
        <user name="admin" password="admin" roles="ssh"/>
      </users>
    </security>

- `user` — имя пользователя.

- `password` | `encryptedPassword` — пароль. Может быть указан в открытом или зашифрованном виде.

- `roles` — роли. Список ролей, доступных пользователю, через запятую.

### Шифрование пароля

Для шифрования пароля необходимо запустить Global 3 Server с параметрами:

    Start.bat -encryptPassword password -masterPassword masterpassword

Где:

- `-encryptPassword` — пароль, который необходимо зашифровать.

- `-masterPassword` — ключ шифрования. Если не указан, используется секретный ключ по умолчанию.

Результатом выполнения будет строка в консоли — зашифрованный пароль, переданный параметром `-encryptPassword`.

## Подключение

Подключиться к SSH-серверу можно с помощью любого SSH-терминала.
Рекомендуемый клиент — PuTTY.

Документация по PuTTY

### Основные параметры

Для подключения укажите:

- Host Name — `host` или `user@host`.

- Port — `22` или пользовательский порт.

- Connection type — `SSH`.

Чтобы не вводить параметры при каждом запуске, сохраните подключение в PuTTY, нажав кнопку Save.

Пример запуска из командной строки:

    "C:\Program Files\PuTTY\putty.exe" -ssh localhost -P 22 -l admin -pw admin

### Логирование

Для сохранения всего текстового вывода в файл на вкладке Logging укажите:

- Session Logging = `All session output`.

- Log file name = `полный путь к файлу`.

Внимание

В адресах пути:

- Символ `\` необходимо экранировать удвоением: `\\`.

- Символ `/` экранировать не нужно.

### Подключение с использованием SSH-RSA ключа

При подключении из `*.bat` или `*.sh` можно использовать RSA-ключи вместо пароля:

    "C:\Program Files\PuTTY\putty.exe" -ssh localhost -P 22 -l admin -i ssh_admin_private.ppk

Необходимые файлы размещены в подкаталоге `.\ssh`.
Ключи для подключения к пользователю `admin` выдаются по запросу.

### Запуск терминала

При первом подключении к серверу появится сообщение с запросом разрешения на подключение. Нажмите: Да.

## Команды

Для получения справки по доступным командам выполните:

    help

Список команд:

- `alter server mode service|normal` — переключает сервер в сервисный режим и обратно.
  В сервисном режиме подключение пользовательских сессий возможно только от имени системного пользователя сервера приложений, указанного в конфигурационном файле.

      <systemUsers>
        <user name="system" password="system"/>
      </systemUsers>

- `attach session {sid}` — подключение к существующей пользовательской сессии.

- `attach db {dbAlias} [as sys]` — подключение к базе данных для выполнения сервисных операций и/или Jexl-скриптов.

- `clear` — очищает экран терминала.

- `clear persistence cache [{dbAlias}]` — очищает Shared-кэш объектов.

- `compare applib {path}` — сравнивает JAR-файлы в каталоге (или ZIP-архиве) `{path}` с JAR-файлами в каталоге `SBT.jarFolder`, соответствующем базе данных, к которой выполнено подключение командой `attach db`. Выполняется сравнение версий модулей и файлов `\*.odm.xml` на наличие новых атрибутов.

- `copy applib [force] {path}` — копирует JAR-файлы из каталога `{path}` в каталог `SBT.jarFolder`, соответствующий подключённой базе данных.
  При указании ключевого слова `force` сравнение файлов `\*.odm.xml` не выполняется.
  Сравнение версий модулей выполняется всегда.

- `Init schema` — выполняет создание или обновление объектов схемы БД.

- `execute {expression}` — выполняет однострочное Jexl-выражение.

- `exit` — закрывает SSH-подключение.

- `jexl [{file}]` — переключает терминал в режим ввода и выполнения скриптов.

## Выполнение SQL

Для выполнения SQL-скрипта:

1. Подключитесь к сессии командами `login`, `attach` или `set sid`.

2. Перейдите в режим ввода скрипта командой `sql`.

3. Введите текст скрипта.

4. Выполните скрипт, введя символ `/` с новой строки.

5. Выйдите из режима ввода, введя символ `/` с новой строки.

Пример:

    login admin/admin@postgres
    sql
    INSERT INTO gs3_roottest (
        id,
        idClass
      ) VALUES (
      (select
        nextval('GS3_ROOTTEST_SEQ'))
        , 12351
      ) ON CONFLICT DO NOTHING;
    /
    /

### Выполнение SQL-скрипта из файла

Для выполнения SQL-скрипта из файла:

1. Подключитесь к сессии.

2. Выполните команду `sql {file}`, где `{file}` — путь к файлу на сервере.

Внимание

Файл должен находиться на локальном диске сервера.

Пример:

    login admin/admin@postgres
    sql D:\\svn\\depot\\ASSource\\sysapplication\\ssh\\src\\test\\java\\ru\\bitec\\app\\ssh\\shh_sql_exams.txt

Содержимое файла:

    INSERT INTO gs3_roottest (id, idClass) VALUES ((select nextval('GS3_ROOTTEST_SEQ')), 12351) ON CONFLICT DO NOTHING;
    INSERT INTO gs3_roottest (id, idClass) VALUES ((select nextval('GS3_ROOTTEST_SEQ')), 12351) ON CONFLICT DO NOTHING;
    /
    INSERT INTO gs3_roottest (id, idClass) VALUES ((select nextval('GS3_ROOTTEST_SEQ')), 12351) ON CONFLICT DO NOTHING;
    INSERT INTO gs3_roottest (id, idClass) VALUES ((select nextval('GS3_ROOTTEST_SEQ')), 12351) ON CONFLICT DO NOTHING;
    /
    /

## Jexl-скрипты

### Выполнение Jexl-скрипта

1. Подключитесь к сессии.

2. Переключитесь в режим ввода скрипта командой `jexl`.

3. Введите текст скрипта.

4. Выполните скрипт, введя символ `/` с новой строки.

5. Выйдите из режима ввода, введя символ `/` с новой строки.

Пример 1:

    login admin/admin@postgres
    jexl
    var name = Btk_ClassApi.getCanonicalClassName("Btk_Object");
    Btk_ClassApi.getApiByCanonicalClassName(name);
    /
    /

Пример 2 (для `dataInstall`):

    login admin/admin@postgres
    jexl
    Bbb_DBTypeApi.dataInstall();
    Btk_Pkg.commit();
    /
    /

Пример 3:

    login admin/admin@postgres
    jexl
    Btk_Pkg.setRWSharedUOWEditType();
    Prs_EntTransApi.dataInstall();
    Btk_Pkg.commit();
    /
    /

### Выполнение Jexl-скрипта из файла

1. Подключитесь к сессии.

2. Выполните команду `jexl {file}`, где `{file}` — путь к файлу на сервере.

Внимание

Файл должен находиться на локальном диске сервера.

Пример:

    login
    jexl D:\\svn\\depot\\ASSource\\sysapplication\\ssh\\src\\test\\java\\ru\\bitec\\app\\ssh\\shh_jexl_exams.txt

Содержимое файла:

    var name = Btk_ClassApi.getCanonicalClassName("Btk_Object");
    Btk_ClassApi.getApiByCanonicalClassName(name);
    /
    /

### Контекст выполнения Jexl-скрипта

Возможны следующие контексты:

Пользовательская сессия

    >login user/password@alias
    >jexl
    jexl>
    /
    /
    >

Доступны все API-классы из SBT, соответствующего пользовательской сессии.

База данных

    >attach db alias
    >jexl
    jexldb>
    /
    /
    >

Доступны методы управления инстансом БД:

- `initschema()` — инициализация/обновление схемы БД.

Системный контекст

    >attach db alias as sys
    >jexl
    jexlsys>
    /
    /
    >

Административный контекст для управления сервером приложений. Доступен метод:

- `upgrade({release_path})` — инициализация/обновление схемы БД по пути к каталогу или ZIP-архиву с релизом.

## Выполнение командного файла SSH

Для выполнения командного файла из командной строки:

    "C:\Program Files\PuTTY\putty.exe" -ssh localhost -P 22 -l admin -pw admin -m shh_logger_test_script.txt

Внимание

В данном примере файл shh_logger_test_script.txt размещён на диске клиентской машины, он считывается в момент подключения к SSH-серверу.
Пути к файлам в скрипте — локальные для сервера.

Содержимое файла:

    login
    log-info app el

    execute Btk_ClassApi.getCanonicalClassName("Btk_Object")

    jexl
    var name = Btk_ClassApi.getCanonicalClassName("Btk_Object");
    Btk_ClassApi.getApiByCanonicalClassName(name);
    /
    /

    jexl D:/svn/depot/ASSource/sysapplication/ssh/src/test/java/ru/bitec/app/ssh/shh_jexl_exams.txt
    jexl D:\\svn\\depot\\ASSource\\sysapplication\\ssh\\src\\test\\java\\ru\\bitec\\app\\ssh\\shh_jexl_exams.txt

    sql
    INSERT INTO gs3_roottest (id, idClass) VALUES ((select nextval('GS3_ROOTTEST_SEQ')), 12351) ON CONFLICT DO NOTHING;
    /
    /

    sql D:\\svn\\depot\\ASSource\\sysapplication\\ssh\\src\\test\\java\\ru\\bitec\\app\\ssh\\shh_sql_exams.txt

    log-off all
    logout

### Логирование

При выполнении скрипта, по умолчанию, в ssh-консоль выводится результат выполнения команды или сообщение об ошибке со стеком вызова.

Для вывода в ssh-консоль дополнительных логов, необходимо их включить.
В консоль можно вывести логи следующих типов:

- `oper` — логи из `ru.bitec.engine.model.operation`.

- `sql` — логи SQL-вызовов на уровне JDBC.

- `script` — логи скриптового языка Global 1 (неактуальны для Scala).

- `app` — логи из `ru.bitec.app.*`.
  Пример:

      Logger.Factory.get(Xxx_XxxApi.class).info("Текст сообщения")

- `el` — логи EclipseLink (более компактные SQL-вызовы).

- `all` — все выше перечисленные типы логов.

Для переключения уровней логирования используются команды (в порядке уменьшения детализации):

- `log-off`;

- `log-error`;

- `log-warn`;

- `log-info`;

- `log-debug`;

- `log-trace`.

Пример:

    log-info app el

В ssh-лог будут попадать сообщения типов `app` и `el` для уровней: `error`, `warn`, `info`.

Для отключения вывода сообщений в ssh-лог:

    log-off all

Перенаправление ssh-лога PuTTY в файл

При выполнении скриптов из командной строки вывод можно перенаправить в файл:

    "C:\Program Files\PuTTY\putty.exe" -ssh localhost -P 22 -l admin -pw admin -m shh_logger_test_script.txt -sessionlog sessionlog.txt

## FAQ

Зависает ssh-терминал на этапе подключения к серверу

При запуске PuTTY из скрипта при первом подключении появляется окно PuTTY Security Alert, что может вызывать зависание.

Решение — автоматически подтвердить подключение:

    echo yes | %plink% -ssh localhost -P 2222 -l admin -i ssh_admin_private.ppk

Примечание

Plink входит в состав дистрибутива PuTTY.