Для работы с удалёнными устройствами через SSH в Aria Automation Orchestrator (бывший vRealize Orchestrator) есть SSH Plug-in. Однако, данный плагин работает не так, как хотелось бы. Он реализует объекты SSHHostManager и SSHHost и имеет набор процессов управления хостами. Но всю полезную работу выполняет объект SSHSession, который никак не связан с объектами SSHHost.
Т.е. Вы можете создать набор SSH хостов, указав все параметры соединений, можете получить список хостов, изменять их, настраивать. Но для выполнения команд и передачи файлов нужно создать другой объект: SSHSession и заново указывать все параметры соединений. Зачем тогда создавались объекты SSHHost? Разработку плагина бросили на полпути, в нём явно не хватает метода: SSHHost.createSshSession(). Можно попробовать использовать данные из объектов SSHHost для создания SSHSession, но…
- При создании SSHHost в конфигурации не сохраняется путь до ключа SSHHost.sshHostConfiguration.certificatePath.
- Пароли хранятся не как SecureString, а как EncryptedString (только сам плагин может получить доступ к дешифрованному тексту).
Могу предложить обходной путь:
- Настроить vRO для расшифровки EncryptedString: https://cloudblogger.co.in/2023/04/14/decrypt-vro-encrypted-string-using-vro-workflow-cb10112/;
- Скачать пакет процессов, получающих все необходимые данные из объектов SSH:Host (путь до приватного ключа, если он необходим, нужно указать в rootFolders при создании хоста).
Однако, в целях безопасности, рекомендую работать только с тем, что уже есть в vRO.
Использование ключей
Когда есть выбор подключаться по паролю или по ключу, лучше использовать ключи. Ключи обеспечивают более высокий уровень безопасности, и этого уже достаточно, чтобы потратить немного больше времени на изучение и настройку.
Процесс “Generate key pair” создаёт ключ для vRO и сохраняет его как /var/lib/vco/app-server/conf/vco_key. Если нужен ключ с другим именем, вызывайте KeyPairManager.generateKeyPair(…) с нужными параметрами. Путь до ключей /var/lib/vco/app-server/conf/ – это путь в контейнере vco-server-app (под vco-app), куда смонтирован реальный каталог с сервера vRA/vRO – /data/vco/usr/lib/vco/app-server/conf/. Если Вам нужно использовать свой ключ, вместо генерируемого vRO, поместите его в данный каталог, но в процессах vRO указывайте путь /var/lib/vco/app-server/conf/. Во время аутентификации по такому ключу может возникнуть ошибка: “Unable to execute command: InternalError: invalid privatekey“, это значит, что формат вашего ключа отличается от ожидаемого PEM-формата:
# Конвертировать приватный ключ в формат PEM:
ssh-keygen -p -f test_key -m pem
# Сменить или установить парольную фразу на ключе:
ssh-keygen -p -f test_key
Работа с файлами на сервере vRO
Процессы отправки и получения файла по SSH работают только с файлами, расположенными на сервере vRO. Значит нужно как-то эти файлы создавать, сохранять в них информацию, а также читать.
// Создать временный файл
var tmpFile = System.createTempFile();
tmpFile.write("Test message");
var tmpFileName = System.getTempDirectory() + "/" + tmpFile.name;
// Создать новый файл и записать в него строку
var fileName = System.getTempDirectory() + "/" + System.nextUUID();
var writer = new FileWriter(fileName);
writer.open();
writer.write(content);
writer.close();
// Прочитать содержимое файла
var reader = new FileReader(fileName);
reader.open();
var content = reader.readAll();
reader.close();
// Удалить файл
var file = new File(fileName);
file.deleteFile();
Каталог для временных файлов на сервере: /data/vco/usr/lib/vco/app-server/temp, он смонтирован в контейнере vco в /usr/lib/vco/app-server/temp (данный путь как раз возвращает метод System.getTempDirectory()).
Файлы к статье
com.vmware.library.ssh.add.package.zip – пакет дополнительных процессов