SSH-клиент
Выполнение команд на сервере и передача файлов.
Введение
Netuno имеет встроенный в свой low-code фреймворк SSH-клиент, который позволяет подключаться к серверам, выполнять команды, отправлять и получать файлы, изменять папки и выполнять другие удалённые операции.
Поддерживает множество одновременных подключений, а также SCP и SFTP.
Это благодаря реализации Java и open-source
SSHJ, что позволяет Netuno
предоставлять эти функциональные возможности всем языкам сценариев через ресурс _ssh.
Подробнее о ресурсе SSH в Netuno.
Настройка
Первым шагом будет настройка данных доступа к SSH, которые Netuno будет использовать для подключения.
Перейдите в разрабатываемом приложении к файлу конфигурации окружения. В этом примере мы будем использовать файл разработки, расположенный по пути:
config/_development.json
Проверьте, есть ли конфигурации для SSH; если их нет, то в конце файла конфигурации (в формате JSON) добавьте параметры конфигурации SSH, например:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "мой.сервер.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
После сохранения изменений достаточно перезапустить Netuno, чтобы применить изменения конфигурации. Это
конфигурация по умолчанию для подключения, как указывает имя ключа default.
Вы можете добавить больше конфигураций подключения SSH с другими ключами в JSON.
Чтобы добавить дополнительные конфигурации подключения SSH, просто повторите блок конфигурации по умолчанию и замените ключ
default на другой по вашему выбору, например:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "мой.сервер.net",
"port": 22,
"username": "root",
"password": "$eCr37"
},
"другая": {
"enabled": true,
"host": "мой.другой-сервер.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
Приведённая выше конфигурация позволяет использовать учётную запись default, если код написан следующим образом:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const ssh = _ssh.init()
const ssh = _ssh.init()
ssh = _ssh.init()
ssh = _ssh.init()
val ssh = _ssh.init()
final ssh = _ssh.init()
Чтобы использовать конфигурацию другая, просто добавьте ключ конфигурации в качестве параметра функции
_ssh.init() следующим образом:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshДругая = _ssh.init("другая")
const sshДругая = _ssh.init("другая")
sshДругая = _ssh.init("другая")
sshДругая = _ssh.init("другая")
val sshДругая = _ssh.init("другая")
final sshДругая = _ssh.init("другая")
Если не добавить имя конфигурации в качестве параметра, будет использована конфигурация учётной записи
default.
Подключение
Прежде чем что-либо делать, необходимо инициировать SSH-подключение:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
Команды
Для выполнения команд необходимо начать сеанс команд:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshСессия = ssh.initSession()
const sshСессия = ssh.initSession()
sshСессия = ssh.initSession()
sshСессия = ssh.initSession()
val sshСессия = ssh.initSession()
final sshСессия = ssh.initSession()
При выполнении команды возвращается объект, содержащий состояние выполнения и соответствующий вывод данных (output), например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshРезультатКоманды = sshСессия.exec("ls -rato")
if (sshРезультатКоманды.ok) {
_out.println("Выполнено успешно:")
_out.println(sshРезультатКоманды.output())
} else {
_out.println("Команда завершилась неудачно:")
_out.println(sshРезультатКоманды.error())
}
const sshРезультатКоманды = sshСессия.exec("ls -rato")
if (sshРезультатКоманды.ok) {
_out.println("Выполнено успешно:")
_out.println(sshРезультатКоманды.output())
} else {
_out.println("Команда завершилась неудачно:")
_out.println(sshРезультатКоманды.error())
}
sshРезультатКоманды = sshСессия.exec("ls -rato")
if sshРезультатКоманды.ok:
_out.println("Выполнено успешно:")
_out.println(sshРезультатКоманды.output())
else:
_out.println("Команда завершилась неудачно:")
_out.println(sshРезультатКоманды.error())
sshРезультатКоманды = sshСессия.exec("ls -rato")
if sshРезультатКоманды.ok
_out.println("Выполнено успешно:")
_out.println(sshРезультатКоманды.output())
else
_out.println("Команда завершилась неудачно:")
_out.println(sshРезультатКоманды.error())
end
val sshРезультатКоманды = sshСессия.exec("ls -rato")
if (sshРезультатКоманды.ok) {
_out.println("Выполнено успешно:")
_out.println(sshРезультатКоманды.output())
} else {
_out.println("Команда завершилась неудачно:")
_out.println(sshРезультатКоманды.error())
}
final sshРезультатКоманды = sshСессия.exec("ls -rato")
if (sshРезультатКоманды.ok) {
_out.println("Выполнено успешно:")
_out.println(sshРезультатКоманды.output())
} else {
_out.println("Команда завершилась неудачно:")
_out.println(sshРезультатКоманды.error())
}
Объект, возвращаемый командой, — это SSHExecResult.
Не забывайте всегда закрывать сеанс:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sshСессия.close()
sshСессия.close()
sshСессия.close()
sshСессия.close()
sshСессия.close()
sshСессия.close()
SCP
С помощью SCP мы можем отправлять и получать файлы.
Чтобы создать текстовый файл из строки и загрузить содержимое созданного файла, см. пример:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Создаёт текстовый файл.
sshSCP.uploadText("привет.txt", "Привет! Моё содержимое здесь...")
// Загружает и выводит содержимое файла.
_out.println(sshSCP.downloadText("привет.txt"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Создаёт текстовый файл.
sshSCP.uploadText("привет.txt", "Привет! Моё содержимое здесь...")
// Загружает и выводит содержимое файла.
_out.println(sshSCP.downloadText("привет.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Создаёт текстовый файл.
sshSCP.uploadText("привет.txt", "Привет! Моё содержимое здесь...")
# Загружает и выводит содержимое файла.
_out.println(sshSCP.downloadText("привет.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Создаёт текстовый файл.
sshSCP.uploadText("привет.txt", "Привет! Моё содержимое здесь...")
# Загружает и выводит содержимое файла.
_out.println(sshSCP.downloadText("привет.txt"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Создаёт текстовый файл.
sshSCP.uploadText("привет.txt", "Привет! Моё содержимое здесь...")
// Загружает и выводит содержимое файла.
_out.println(sshSCP.downloadText("привет.txt"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Создаёт текстовый файл.
sshSCP.uploadText("привет.txt", "Привет! Моё содержимое здесь...")
// Загружает и выводит содержимое файла.
_out.println(sshSCP.downloadText("привет.txt"))
sshSCP.close()
Чтобы выполнить отправку (upload) существующих файлов в приложении:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Отправляет файл, находящийся в storage/filesystem.
sshSCP.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sshSCP.upload("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Отправляет файл, находящийся в storage/filesystem.
sshSCP.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sshSCP.upload("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Отправляет файл, находящийся в storage/filesystem.
sshSCP.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Отправляет файл, находящийся в корне приложения.
sshSCP.upload("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Отправляет файл, находящийся в storage/filesystem.
sshSCP.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Отправляет файл, находящийся в корне приложения.
sshSCP.upload("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Отправляет файл, находящийся в storage/filesystem.
sshSCP.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sshSCP.upload("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Отправляет файл, находящийся в storage/filesystem.
sshSCP.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sshSCP.upload("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
Чтобы загрузить (download) файлы с сервера в приложение:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Загружает файл в storage/filesystem.
sshSCP.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sshSCP.download("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Загружает файл в storage/filesystem.
sshSCP.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sshSCP.download("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Загружает файл в storage/filesystem.
sshSCP.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Загружает файл в корень приложения.
sshSCP.download("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Загружает файл в storage/filesystem.
sshSCP.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Загружает файл в корень приложения.
sshSCP.download("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Загружает файл в storage/filesystem.
sshSCP.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sshSCP.download("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Загружает файл в storage/filesystem.
sshSCP.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sshSCP.download("документ.pdf", _app.file("документ.pdf"))
sshSCP.close()
SFTP
SFTP — это способ передачи и управления файлами и папками, который поддерживает те же функциональные возможности, что и FTP, но с использованием SSH.
Чтобы начать новый сеанс SFTP:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sftp = ssh.initSFTP()
const sftp = ssh.initSFTP()
sftp = ssh.initSFTP()
sftp = ssh.initSFTP()
val sftp = ssh.initSFTP()
final sftp = ssh.initSFTP()
Инициализирует объект SSHSFTP, который является клиентом сеанса.
Создать новую папку удалённо:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.createDirectory("путь/новая-папка")
sftp.createDirectory("путь/новая-папка")
sftp.createDirectory("путь/новая-папка")
sftp.createDirectory("путь/новая-папка")
sftp.createDirectory("путь/новая-папка")
sftp.createDirectory("путь/новая-папка")
Создаёт или заменяет удалённый файл переданным текстовым содержимым:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.uploadText("папка/файл.txt", "Моё содержимое!")
sftp.uploadText("папка/файл.txt", "Моё содержимое!")
sftp.uploadText("папка/файл.txt", "Моё содержимое!")
sftp.uploadText("папка/файл.txt", "Моё содержимое!")
sftp.uploadText("папка/файл.txt", "Моё содержимое!")
sftp.uploadText("папка/файл.txt", "Моё содержимое!")
Получает текстовое содержимое удалённого файла:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const содержимоеУдалённогоФайла = sftp.downloadText("папка/файл.txt")
_out.println(содержимоеУдалённогоФайла)
const содержимоеУдалённогоФайла = sftp.downloadText("папка/файл.txt")
_out.println(содержимоеУдалённогоФайла)
содержимоеУдалённогоФайла = sftp.downloadText("папка/файл.txt")
_out.println(содержимоеУдалённогоФайла)
содержимоеУдалённогоФайла = sftp.downloadText("папка/файл.txt")
_out.println(содержимоеУдалённогоФайла)
val содержимоеУдалённогоФайла = sftp.downloadText("папка/файл.txt")
_out.println(содержимоеУдалённогоФайла)
final содержимоеУдалённогоФайла = sftp.downloadText("папка/файл.txt")
_out.println(содержимоеУдалённогоФайла)
Окончательно удаляет удалённый файл:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteFile("папка/файл.txt")
sftp.deleteFile("папка/файл.txt")
sftp.deleteFile("папка/файл.txt")
sftp.deleteFile("папка/файл.txt")
sftp.deleteFile("папка/файл.txt")
sftp.deleteFile("папка/файл.txt")
Окончательно удаляет удалённую папку:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteDirectory("папка")
sftp.deleteDirectory("папка")
sftp.deleteDirectory("папка")
sftp.deleteDirectory("папка")
sftp.deleteDirectory("папка")
sftp.deleteDirectory("папка")
Перечисляет всё содержимое папки:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
for (const i of sftp.list("путь/папка")) {
if (i.directory) {
_out.print("Папка: ")
} else if (i.regularFile) {
_out.print("Файл: ")
} else {
_out.print("Другое: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for (const i of sftp.list("путь/папка")) {
if (i.directory) {
_out.print("Папка: ")
} else if (i.regularFile) {
_out.print("Файл: ")
} else {
_out.print("Другое: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for i in sftp.list("путь/папка"):
if i.directory:
_out.print("Папка: ")
elif i.regularFile:
_out.print("Файл: ")
else:
_out.print("Другое: ")
_out.println(i.name)
_out.println("<br/>")
sftp.list("путь/папка").each do |i|
if i.directory
_out.print("Папка: ")
elsif i.regularFile
_out.print("Файл: ")
else
_out.print("Другое: ")
end
_out.println(i.name)
_out.println("<br/>")
end
sftp.list("путь/папка").forEach {
if (it.directory) {
_out.print("Папка: ")
} else if (it.regularFile) {
_out.print("Файл: ")
} else {
_out.print("Другое: ")
}
_out.println(it.name)
_out.println("<br/>")
}
for (i in sftp.list("путь/папка")) {
if (i.directory) {
_out.print("Папка: ")
} else if (i.regularFile) {
_out.print("Файл: ")
} else {
_out.print("Другое: ")
}
_out.println(i.name)
_out.println("<br/>")
}
Возвращает список объектов типа SSHFile.
Чтобы выполнить отправку (upload) существующих файлов в приложении:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Отправляет файл, находящийся в storage/filesystem.
sftp.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sftp.upload("документ.pdf", _app.file("документ.pdf"))
// Отправляет файл, находящийся в storage/filesystem.
sftp.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sftp.upload("документ.pdf", _app.file("документ.pdf"))
# Отправляет файл, находящийся в storage/filesystem.
sftp.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Отправляет файл, находящийся в корне приложения.
sftp.upload("документ.pdf", _app.file("документ.pdf"))
# Отправляет файл, находящийся в storage/filesystem.
sftp.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Отправляет файл, находящийся в корне приложения.
sftp.upload("документ.pdf", _app.file("документ.pdf"))
// Отправляет файл, находящийся в storage/filesystem.
sftp.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sftp.upload("документ.pdf", _app.file("документ.pdf"))
// Отправляет файл, находящийся в storage/filesystem.
sftp.upload("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Отправляет файл, находящийся в корне приложения.
sftp.upload("документ.pdf", _app.file("документ.pdf"))
Чтобы загрузить (download) файлы с сервера в приложение:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Загружает файл в storage/filesystem.
sftp.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sftp.download("документ.pdf", _app.file("документ.pdf"))
// Загружает файл в storage/filesystem.
sftp.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sftp.download("документ.pdf", _app.file("документ.pdf"))
# Загружает файл в storage/filesystem.
sftp.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Загружает файл в корень приложения.
sftp.download("документ.pdf", _app.file("документ.pdf"))
# Загружает файл в storage/filesystem.
sftp.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
# Загружает файл в корень приложения.
sftp.download("документ.pdf", _app.file("документ.pdf"))
// Загружает файл в storage/filesystem.
sftp.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sftp.download("документ.pdf", _app.file("документ.pdf"))
// Загружает файл в storage/filesystem.
sftp.download("таблица.xlsx", _storage.filesystem("сервер", "таблица.xlsx").file())
// Загружает файл в корень приложения.
sftp.download("документ.pdf", _app.file("документ.pdf"))
Не забывайте всегда закрывать сеанс SFTP:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()