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
Entering terminal in to ‘lic’ mode for input a new license.
- alter server mode [normal|service]
Enters the server into service or normal mode.
- attach db [dbAlias] [as sys]
Establish connection to the default or specified {dbAlias} database.
- clear
Clear terminal window.
- clear persistence cache [{dbAlias}]
Clear persistence shared cache.
- compare applib {release_path}
Compare jar’s in current sbt jarDir and release dir.
- copy applib [force] {release_path}
Copy jar’s from release dir to current SBT jarFolder.
- detach
Detach database connection, established by attach command.
- dump all session threads
Print stack trace of all or session threads.
- dump all threads
Print stack trace of all threads.
- dump session thread {sid}
Print stack trace of the session {sid} thread.
- echo {message}
Print {message}.
- execute {expression}
Execute Jexl expression.
- exit
Close SSH session.
- help
Print list of available commands.
- init schema
Initialize database schema. Required ‘attach db as sys’ before.
- init data
Initialize default data. Required ‘attach db as sys’ before.
- jexl
Entering terminal in to ‘jexl’ mode for input a text of JEXL-script.
- kill session {sid}
Kill the session {sid}.
- kill classloader {mills} | [{sbtName} {mills}]
Force close ClassLoaders witch was deactivated older then {mills} milliseconds.
- list license | sbt | web | session
List licenses or sbt instances or web applications or user sessions.
- log-debug sql| app| el| oper| script| all
Set DEBUG log level.
- log-error sql | app | el | oper | script | all
Set ERROR log level.
- log-info sql | app | el | oper | script | all
Set INFO log level.
- log-off sql | app | el | oper | script | all
Set OFF log level.
- log-trace sql | app | el | oper | script | all
Set TRACE log level.
- log-warn sql | app | el | oper | script | all
Set WARN log level.
- logattach
Start monitoring log messages.
- login {user/password@dbAlias}|{}
Open a user session to the database.
- logout
Close a user session or disconnect from session attached earlier.
- print license request
Print license request.
- print current license
Print aggregate of all installed licenses.
- refresh web {web}
Restart web application.
- reload sbt {sbt}
Refresh SBT binary directory and reload ClassLoader.
- reload persistence {dbAlias}
Reloading entity descriptors and common libraries.
- remove license {id}
Remove license by {id}.
- reset upgrade {idSession}
Reset current upgrade state.
- restart web {web}
Restart web application.
- run {file}
Run script file.
- save sessions
Save all E-sessions state.
- save session {sid}
Save E-session state.
- set web {web}
Set environment variable ‘web’.
- set db {dbAlias}
Set environment variable ‘defaultDb’.
- set sid {sid}
Set environment variable ‘sid’.
- shutdown server [{delay}] | [immediate]
Shutdown server after {delay} (in seconds) or immediate.
- sql
Entering terminal in to ‘sql’ mode for input a text of SQL-script.
- stack trace
Print stack trace of all session threads.
- start web {web}
Start web application named {web}.
- stop web {web}
Stop web application named {web}.
- update acobjects
Initialize default data. ‘attach db as sys’ before.
- upgrade [force]
Run upgrade process. If
force
- all migrations errors will be ignored
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.