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 Namehost или user@host.

  • Port22 или пользовательский порт.

  • Connection typeSSH.

Чтобы не вводить параметры при каждом запуске, сохраните подключение в 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.