5.6. SSH#
5.6.1. Введение#
Сервер приложений Global ERP включает в себя SSH (Secure Shell) сервер, к которому возможно подключиться любым SSH-терминалом.
С помощью команд командной строки возможно:
Управлять клиентскими сессиями
Обновлять и перезагружать код прикладных приложений
Перезапускать Web-приложения
Выполнять SQL и Jexl-скрипты
5.6.2. Конфигурирование#
Конфигурационный файл global3.config.xml может содержать секцию <ssh/>
:
<ssh defaultDb="PostgreSql" port="22"/>
See also
Учётные данные пользователей, имеющих права на ssh-соединения, указываются в секции <security/> конфигурационного файл global3.config.xml:
<security>
<users>
<user name="admin" password="admin" roles="ssh"/>
</users>
</security>
5.6.2.1. Шифрование пароля#
Для шифрования пароля необходимо запустить Global 3 Server c парамерами.
start.bat -encryptPassword password -masterPassword masterpassword
Где:
encryptPassword
- пароль который необходимо зашифровать.masterPassword
- ключ шифрования.
Результатом выполнения будет вывод в консоль строки, полученной в результате шифрования пароля переданного параметром -encryptPassword
.
5.6.2.2. Криптографический ключ SSH-сервера#
Приватный ключ SSH-сервера используется для удостоверения подлинности узла при установке защищённого SSL-соединения. Дистрибутив сервера приложений содержит в себе ключ SSH-сервера по умолчанию, что бы он не менялся при каждом перезапуске сервера.
Changed in version 1.22.0-rc16: Добавлена возможность замены ключа.
Для изменения ключа SSH-сервера, разместите/замените файл ./ssh/ssh_host_key
в каталоге с конфигурационными файлами сервера.
{G3_HOME}
└── application
└── config
└── ssh
└── ssh_host_key
Tip
Для создания или конвертации ключей можно воспользоваться графической утилитой C:\Program Files\PuTTY\puttygen.exe
ssh_host_key
- файл содержит приватный RSA-ключ в формате PEM.
-----BEGIN RSA PRIVATE KEY-----
AAGHJJKKKLLJGKLYGKJHGLKJGHLKJHLKJHLKJHKJH...
-----END RSA PRIVATE KEY-----
или
-----BEGIN OPENSSH PRIVATE KEY-----
c2gtcnNhAAAAAwEAAQAAAQEAgZFF5/IE3G6Ccw5jd...
-----END OPENSSH PRIVATE KEY-----
5.6.2.3. Криптографические ключи SSH-пользователей#
Для аутентификации пользователя, при подключении к SSH-серверу, вместо пароля может быть использован публичный
криптографический ключ. Публичный ключ пользователя должен быть добавлен в файл authorized_keys
,
соответсвующий пользователю, в каталоге с конфигурационными файлами сервера приложений.
Changed in version 1.22.0-rc16: Добавлена возможность замены ключа для пользователя admin и добавление ключей других пользователей.
Структура хранения публичных ключей пользователей для аутентификации в ssh.
{G3_HOME}
└── application
└── config
└── users
├── admin
| └── .ssh
| └── authorized_keys
└── user
└── .ssh
└── authorized_keys
Note
Криптографический ключ пользователя является дополнительной информацией к учётной записи пользователя, определенной в конфигурации сервера приложений.
5.6.3. Подключение#
Подключиться к SSH-серверу возможно любым SSH-терминалом.
5.6.3.1. Putty#
See also
5.6.3.1.1. Основные параметры#
Для подключения необходимо указать:
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
5.6.3.1.2. Сохранение логов#
Для сохранения всего текстового вывода в файл, на вкладке Logging
диалога подключения необходимо указать:
Session Logging: All session output
Log file name:: полный путь к файлу
Warning
В путях символ\
необходимо экранировать удвоением. Пример:C:\\directory\\log.txt
.Символ / экранировать не требуется. Пример:C:/directory/log.txt
.
5.6.3.1.3. Подключение с использованием RSA ключа#
При подключении к SSH из *.bat иил *.sh можно воспользоваться RSA-ключом вместо пароля.
"C:\Program Files\PuTTY\putty.exe" -ssh localhost -P 22 -l admin -i ssh_admin_private_key.ppk
Tip
Для создания или конвертации ключей можно воспользоваться графической утилитой C:\Program Files\PuTTY\puttygen.exe
5.6.3.2. Windows 10 Shell#
ssh admin@localhost -p 22
5.6.4. Команды#
- add license
Переключает терминал в режим ввода текста лицензии.
- alter server mode normal
Переключает сервер из сервисного режима в рабочий рабочий режим.
- Опции:
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
- alter server mode service
Переводит сервер в режим обслуживания. Используется для обновления схемы. При переключении в этот режим все пользовательские сеансы, кроме SSH, завершаются. Служба
isAlive
возвращает ошибку 503.- Опции:
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
- attach db {dbAlias} [as sys]
Устанавливает соединение с базой данных решения по умолчанию или указанной {dbAlias}.
- clear
Очищает окно терминала.
- clear persistence cache [{dbAlias}]
Очищает JPA-кэши решения по умолчанию или для указанной {dbAlias}.
- compare applib {release_path}
Сравнивает jar-файлы в текущем каталоге дистрибутива <sbt jarFolder=”{distributive_path}”/> и каталоге {release_path}.
- copy applib {release_path}
Копирует jar-файлы из каталога {release_path} в текущий каталог <sbt jarFolder=”{distributive_path}”/>.
- copy applib force {release_path}
[DEPRECTED] Копирует jar-файлы из каталога {release_path} в текущий каталог <sbt jarFolder=”{distributive_path}”/> без проверки совпадения версий.
- detach
Закрывает соединение с базой данных, установленное командой attach.
- dump all session threads
Печатает трассировку стека всех потоков сеанса.
- dump all threads
Печатает трассировку стека всех потоков.
- dump session thread {sid}
Печатает трассировку стека потока рабочего сеанса {sid}.
- echo {message}
Печатает сообщение {message}.
- execute {expression}
Выполняет выражение Jexl.
- exit
Закрывает SSH сеанс и разрывает соединение.
- help
Печатает список доступных команд.
- init schema
Инициализирует схему базы данных. Перед этим требуется подключиться к базе командой ‘attach db as sys’.
- init data
Инициализирует данные по умолчанию. Перед этим требуется подключиться к базе командой ‘attach db as sys’.
- jexl
Переключает терминал в режим ввода JEXL скрипта.
- kill sessions
Закрывает рабочие сеансы.
- Опции:
- --all
Все рабочие сеансы.
- --with-obsolete-solution
Использующие устаревшие версии кода решения.
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
- kill session {sid}
Закрывает рабочий сеанс и идентификатором {sid}.
- kill classloader {mills} | [{sbtName} {mills}]
Завершает использование устаревших более {mills} миллисекунд назад версий решения. Все рабочие сеансы, использующие устаревшие версии решения, закрываются.
- list license
Печатает список лицензий.
- list sessions
Печатает список рабочих сеансов.
- list sbt
Печатает список образов решений.
- list web
Печатает список веб-приложений, содержащихся в образах решений.
- list session
[DEPRECATED] Печатает список рабочих сеансов.
- list solutions
Печатает список решений.
- log-debug sql|app|el|oper|script|all
Устанавливает уровень логирования
DEBUG
указанному источнику логов.
- log-error sql|app|el|oper|script|all
Устанавливает уровень логирования
ERROR
указанному источнику логов.
- log-info sql|app|el|oper|script|all
Устанавливает уровень логирования
INFO
указанному источнику логов.
- log-off sql|app|el|oper|script|all
Устанавливает уровень логирования
OFF
указанному источнику логов.
- log-trace sql|app|el|oper|script|all
Устанавливает уровень логирования
TRACE
указанному источнику логов.
- log-warn sql|app|el|oper|script|all
Устанавливает уровень логирования
WARN
указанному источнику логов.
- logattach
Подключает поток вывода консоли сервера в ssh-терминал.
- login {user/password@dbAlias}|{}
Запускает рабочий сеанс к указанному решению, для выполнения SQL и JEXL скриптов.
- logout
Закрывает сеанс пользователя запущенный командой
login
или отключает от подключенного командойattach
сеанса.
- notify sessions
Отправляет всплывающее уведомления рабочим сеансам с графическим интерфейсом.
- Опции:
- --all
Всем сессиям.
- --with-obsolete-solution
Использующим устаревшие версии кода решения.
- --message
Текст сообщения.
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
- print license request
Печатает запрос лицензии для базы данных решения.
- print current license
Печатает агрегированную информацию из всех установленных лицензиях.
- refresh web {web}
[DEPRECATED] Перезапускает веб-приложение с указанным именем.
- reload sbt [sbt]
Перезагружает образ решения по умолчанию или образ с указанным именем ‘<sbt name=”{sbt}”/>’.
- reload sbt safe [sbt]
[DEPRECATED: Use reload sbt [name]] Перезагружает образ решения по умолчанию или образ с указанным именем.
- reload solution
Перезагружает образ решения по умолчанию или с указанным именем.
- Опции:
- --name
Имя решения ‘<database alias={name}/>’.
- --path
Путь к каталогу с дистрибутивом ‘<sbt source={path}/>’ или ‘<sbt jarFolder={path}/>’ в зависимости от ‘<sbt mode=[DEV|JAR]/>’. Имеет значение если аргумент –name не указан.
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
- reload persistence [{dbAlias}]
Перезагружает описания JPA сущностей.
- remove license {ID}
Удаляет лицензию с идентификатором
{ID}
из таблицы лицензий.
- reset upgrade {idSession}
Сбрасывает текущее состояние обновления схемы. Используется если предыдущая попытка обновление схемы завершилось неудачей и необходимо начать обновление с начала.
- restart web {web}
[DEPRECATED] Перезапускает веб-приложение с указанным именем.
- run {file}
Выполняет последовательность ssh-команд, содержащихся в указанном файле.
- save sessions
Сохраняет состояния всех рабочих сеансов с пользовательским интерфейсом в БД координатора кластера.
- save session {sid}
Сохраняет состояние рабочего сеанса с пользовательским интерфейсом в БД координатора кластера. {sid} - строка в формате “E-n”.
- set web {web}
[DEPRECATED] Set environment variable
web
.
- set db {dbAlias}
[DEPRECATED] Set environment variable
defaultDb
.
- set sid {sid}
[DEPRECATED] Set environment variable
sid
.
- shutdown server
Выключает сервер через
{delay}
секунд. Используется для мягкого выключения. Всем пользователям предлагается завершить свою работу в течение указанного интервала времени. Страница входа возвращает ошибку 404.- Опции:
- --delay
Задержка выключения сервера (в секундах).
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
- shutdown server immediate
Выключает сервер немедленно.
- Опции:
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
- sql
Переключает терминал в режим ввода SQL скрипта.
- stack trace
Печатает трассировку стека всех потоков сеанса.
- start web {web}
[DEPRECATED] Запускает веб-приложение с именем {web}.
- stop web {web}
[DEPRECATED] Останавливает веб-приложение с именем {web}.
- update acobjects
Инициализирует данные по умолчанию. Перед этим выполните команду
attach db as sys
.
- upgrade
Запускает обновление схемы. Перед этим выполните команду
attach db as sys
.
- upgrade force
Запускает обновление схемы. Все ошибки миграции будут игнорированы.
- wait solution distributive unlock
Ожидает разблокировки каталога с дистрибутивом решения (
<sbt jarFolder={path}/>
). Используется для проверки, что сервер приложений сейчас не копирует из этого каталога. Поместите файлsolution.lock
в каталог перед выполнением этой команды. Не забудьте удалитьsolution.lock
в конце работы с каталогом. Сервер не начнёт копирование, пока существует файл ``solution.lock`. Опции:- --name
Имя решения ‘<database alias={name}/>’.
- --path
Путь к каталогу с дистрибутивом ‘<sbt source={path}/>’ или ‘<sbt jarFolder={path}/>’ в зависимости от ‘<sbt mode=[DEV|JAR]/>’. Имеет значение если аргумент –name не указан.
- --timeout-mills
Таймаут ожидания, в миллисекундах.
- --format
- Формат ответа.По умолчанию: TEXTВозможные значения: [TEXT, JSON]
5.6.4.1. Выполнение командного файла ssh#
Для выполнения командного файла из командной строки можно выполнить:
"C:\Program Files\PuTTY\putty.exe" -ssh localhost -P 22 -l admin -pw admin -m shh_logger_test_script.txt
Attention
В данном примере файл 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
5.6.5. Выполнение 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;
/
/
5.6.5.1. Выполнение SQL скрипта из файла#
Для выполнения sql-скрипта из файла:
Подключитесь к сессии.
- Выполните команду
sql {file}
.Где {file} – путь к файлу к файлу на сервере.Attention
Файл должен находится на локальном диске сервера.
Пример:
login admin/admin@postgres
sql D:\\globalerp\\scripts\\my_sql_script.sql
Содержимое файла.
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;
/
/
5.6.6. Jexl скрипты#
Для выполнения Jexl-скрипта необходимо:
Подключитесь к сессии командой
login
,attach
илиset sid
.Переключитесь в режим ввода скрипта командой ‘’jexl’’.
Введите текст скрипта.
- Выполните скриптДля этого введите символ ‘’/’’ с новой строки.
- Выйдите из режима вводаДля этого введите символ ‘’/’’ с новой строки.
Пример:
login admin/admin@postgres
jexl
var name = Btk_ClassApi.getCanonicalClassName("Btk_Object");
Btk_ClassApi.getApiByCanonicalClassName(name);
/
/
5.6.6.1. Выполнение Jexl скрипта из файла#
Для выполнения sql-скрипта из файла:
Подключитесь к сессии.
- Выполните команду
jexl {file}
.Где {file} – путь к файлу к файлу на сервере.Attention
Файл должен находится на локальном диске сервера.
Пример:
login admin/admin@postgres
jexl D:\\globalerp\\scripts\\my_jexl_script.sql
Содержимое файла.
var name = Btk_ClassApi.getCanonicalClassName("Btk_Object");
Btk_ClassApi.getApiByCanonicalClassName(name);
/
/
5.6.6.2. Контексты выполнения Jexl скрипта#
Возможны следующие контексты выполнения Jexl-скрипта:
jexl - Пользовательская сессия
jexldb - База данных
jexlsys - Сервер приложений
5.6.6.2.1. Пользовательская сессия#
В данном контексте доступны все Api-классы, присутствующие в решении, соответствующем пользовательской сессии.
login user/password@alias
jexl
{текст скрипта}
/
/
5.6.6.2.2. База данных#
В данном контексте доступны методы управления экземпляром базы данных:
- initschema()
Выполняет инициализацию/обновление схемы БД в соответствии с текущей прикладной кодовой базой решения.
attach db {alias}
jexl
{текст скрипта}
/
/
5.6.6.2.3. Сервер приложений#
В данном контексте доступны методы управления решениями. Данный контекст является административным и предназначен для управления сервером приложений. Доступны следующие методы:
- upgrade({release_path})
- Выполняет обновление кодовой базы решения и схемы БД в соответствии с новой прикладной кодовой базой.Где:{release_path} – путь к каталогу или zip-архиву, на жёстком диске сервера, с релизом прикладных модулей.
attach db {alias} as sys
jexl
{текст скрипта}
/
/
5.6.7. Логирование#
При выполнении скрипта, по умолчанию, в ssh-консоль выводится результат выполнения команды или сообщение об ошибке со стеком вызова.
Для вывода в ssh-консоль дополнительных логов, необходимо их включить. В консоль можно вывести логи следующих типов.
5.6.7.1. Типы логов#
- oper
Логи из классов с namespace ru.bitec.engine.model.operation.
- sql
Логи sql-вызовов с уровня jdbc-соединения с базой.
- script
Логи из скриптового языка в режиме совместимости с Global 1. При работе со Scala не имеют смысла.
- app
- Логи из классов прикладной логики с namespace ru.bitec.app.*.Пример отправки сообщения:
Logger.Factory.get(Xxx_XxxApi.class).info("Текст сообщения")
- el
Логи из инфраструктуры EclipseLink. В основном, это sql-вызовы, в более компактном виде, чем логи jdbc.
- 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
5.6.7.2. Перенаправление ssh-лога Putty в файл#
При выполнении скриптов из командной строки, часто необходимо перенаправить вывод в файл. Для ssh-консоли Putty,
это выполняется передачей параметра -sessionlog {имя_файла.txt}
5.6.8. FAQ#
- Зависает ssh-терминал на этапе подключения к серверу.
При запуске Putty из скрипта при первом подключении к серверу выдается сообщение PuTTY Security Alert, что может приводить к зависанию скрипта.
Необходимо дополнительно передать подтверждение при запуске:
echo yes | %plink% -ssh localhost -P 2222 -l admin -i ssh_admin_private.ppk
Note
Plink входит в состав дистрибутива PuTTY.