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.
Основные параметры#
Для подключения укажите:
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-скрипта:
Подключитесь к сессии командами
login,attachилиset sid.Перейдите в режим ввода скрипта командой
sql.Введите текст скрипта.
Выполните скрипт, введя символ
/с новой строки.Выйдите из режима ввода, введя символ
/с новой строки.
Пример:
login admin/admin@postgres
sql
INSERT INTO gs3_roottest (
id,
idClass
) VALUES (
(select
nextval('GS3_ROOTTEST_SEQ'))
, 12351
) ON CONFLICT DO NOTHING;
/
/
Выполнение SQL-скрипта из файла#
Для выполнения SQL-скрипта из файла:
Подключитесь к сессии.
Выполните команду
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-скрипта#
Подключитесь к сессии.
Переключитесь в режим ввода скрипта командой
jexl.Введите текст скрипта.
Выполните скрипт, введя символ
/с новой строки.Выйдите из режима ввода, введя символ
/с новой строки.
Пример 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-скрипта из файла#
Подключитесь к сессии.
Выполните команду
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.