Klient SSH
Wykonywanie poleceń na serwerze i przesyłanie plików.
Wprowadzenie
Netuno ma zintegrowanego w swoim frameworku low-code klienta SSH, który umożliwia łączenie się z serwerami, wykonywanie poleceń, wysyłanie i odbieranie plików, modyfikowanie katalogów oraz inne operacje zdalne.
Obsługuje wiele równoczesnych połączeń, a także SCP i SFTP.
Jest to możliwe dzięki implementacji Java i open-source
SSHJ, która pozwala Netuno
udostępniać te funkcjonalności wszystkim językom skryptowym poprzez zasób _ssh.
Więcej o zasobie SSH w Netuno.
Konfiguracja
Pierwszym krokiem będzie skonfigurowanie danych dostępowych SSH, których Netuno użyje do nawiązania połączenia.
W rozwijanej aplikacji przejdź do pliku konfiguracji środowiska. W tym przykładzie użyjemy pliku deweloperskiego, znajdującego się w:
config/_development.json
Sprawdź, czy istnieją konfiguracje dla SSH; jeśli nie, to na końcu pliku konfiguracji (w formacie JSON) dodaj parametry konfiguracji SSH, na przykład:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "moj.serwer.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
Po zapisaniu zmian wystarczy ponownie uruchomić Netuno, aby przyjął zmiany konfiguracji. Są to
domyślne ustawienia połączenia, jak wskazuje nazwa klucza default.
Możesz dodać więcej konfiguracji połączeń SSH z innymi kluczami w JSON.
Aby dodać więcej konfiguracji połączeń SSH, wystarczy powtórzyć domyślny blok konfiguracji i zmienić klucz
default na inny według własnego wyboru, na przykład:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "moj.serwer.net",
"port": 22,
"username": "root",
"password": "$eCr37"
},
"inny": {
"enabled": true,
"host": "moj.inny-serwer.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
Powyższa konfiguracja pozwala użyć konta default, gdy zostanie zakodowane w następujący sposób:
- 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()
Aby użyć konfiguracji inny, wystarczy dodać klucz konfiguracji jako parametr funkcji
_ssh.init(), w następujący sposób:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshInny = _ssh.init("inny")
const sshInny = _ssh.init("inny")
sshInny = _ssh.init("inny")
sshInny = _ssh.init("inny")
val sshInny = _ssh.init("inny")
final sshInny = _ssh.init("inny")
Jeśli nie dodasz nazwy konfiguracji jako parametru, zostanie użyta konfiguracja konta
default.
Połączenie
Przed wykonaniem czegokolwiek należy zainicjować połączenie SSH:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
Polecenia
Aby wykonywać polecenia, należy rozpocząć sesję poleceń:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sesjaSsh = ssh.initSession()
const sesjaSsh = ssh.initSession()
sesjaSsh = ssh.initSession()
sesjaSsh = ssh.initSession()
val sesjaSsh = ssh.initSession()
final sesjaSsh = ssh.initSession()
Podczas wykonywania polecenia zwracany jest obiekt zawierający stan wykonania oraz odpowiednie dane wyjściowe (output), na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const wynikPoleceniaSsh = sesjaSsh.exec("ls -rato")
if (wynikPoleceniaSsh.ok) {
_out.println("Wykonano pomyślnie:")
_out.println(wynikPoleceniaSsh.output())
} else {
_out.println("Polecenie nie powiodło się:")
_out.println(wynikPoleceniaSsh.error())
}
const wynikPoleceniaSsh = sesjaSsh.exec("ls -rato")
if (wynikPoleceniaSsh.ok) {
_out.println("Wykonano pomyślnie:")
_out.println(wynikPoleceniaSsh.output())
} else {
_out.println("Polecenie nie powiodło się:")
_out.println(wynikPoleceniaSsh.error())
}
wynikPoleceniaSsh = sesjaSsh.exec("ls -rato")
if wynikPoleceniaSsh.ok:
_out.println("Wykonano pomyślnie:")
_out.println(wynikPoleceniaSsh.output())
else:
_out.println("Polecenie nie powiodło się:")
_out.println(wynikPoleceniaSsh.error())
wynikPoleceniaSsh = sesjaSsh.exec("ls -rato")
if wynikPoleceniaSsh.ok
_out.println("Wykonano pomyślnie:")
_out.println(wynikPoleceniaSsh.output())
else
_out.println("Polecenie nie powiodło się:")
_out.println(wynikPoleceniaSsh.error())
end
val wynikPoleceniaSsh = sesjaSsh.exec("ls -rato")
if (wynikPoleceniaSsh.ok) {
_out.println("Wykonano pomyślnie:")
_out.println(wynikPoleceniaSsh.output())
} else {
_out.println("Polecenie nie powiodło się:")
_out.println(wynikPoleceniaSsh.error())
}
final wynikPoleceniaSsh = sesjaSsh.exec("ls -rato")
if (wynikPoleceniaSsh.ok) {
_out.println("Wykonano pomyślnie:")
_out.println(wynikPoleceniaSsh.output())
} else {
_out.println("Polecenie nie powiodło się:")
_out.println(wynikPoleceniaSsh.error())
}
Obiekt zwracany przez polecenie to SSHExecResult.
Pamiętaj, aby zawsze zamykać sesję:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sesjaSsh.close()
sesjaSsh.close()
sesjaSsh.close()
sesjaSsh.close()
sesjaSsh.close()
sesjaSsh.close()
SCP
Za pomocą SCP możemy wysyłać i odbierać pliki.
Aby utworzyć plik tekstowy z ciągu znaków i pobrać zawartość utworzonego pliku, zobacz przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const klientSCP = ssh.initSCP()
// Tworzy plik tekstowy.
klientSCP.uploadText("witaj.txt", "Cześć! Moja treść tutaj...")
// Pobiera i wyświetla zawartość pliku.
_out.println(klientSCP.downloadText("witaj.txt"))
klientSCP.close()
const klientSCP = ssh.initSCP()
// Tworzy plik tekstowy.
klientSCP.uploadText("witaj.txt", "Cześć! Moja treść tutaj...")
// Pobiera i wyświetla zawartość pliku.
_out.println(klientSCP.downloadText("witaj.txt"))
klientSCP.close()
klientSCP = ssh.initSCP()
# Tworzy plik tekstowy.
klientSCP.uploadText("witaj.txt", "Cześć! Moja treść tutaj...")
# Pobiera i wyświetla zawartość pliku.
_out.println(klientSCP.downloadText("witaj.txt"))
klientSCP.close()
klientSCP = ssh.initSCP()
# Tworzy plik tekstowy.
klientSCP.uploadText("witaj.txt", "Cześć! Moja treść tutaj...")
# Pobiera i wyświetla zawartość pliku.
_out.println(klientSCP.downloadText("witaj.txt"))
klientSCP.close()
val klientSCP = ssh.initSCP()
// Tworzy plik tekstowy.
klientSCP.uploadText("witaj.txt", "Cześć! Moja treść tutaj...")
// Pobiera i wyświetla zawartość pliku.
_out.println(klientSCP.downloadText("witaj.txt"))
klientSCP.close()
final klientSCP = ssh.initSCP()
// Tworzy plik tekstowy.
klientSCP.uploadText("witaj.txt", "Cześć! Moja treść tutaj...")
// Pobiera i wyświetla zawartość pliku.
_out.println(klientSCP.downloadText("witaj.txt"))
klientSCP.close()
Aby przesłać (upload) pliki istniejące w aplikacji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const klientSCP = ssh.initSCP()
// Wysyła plik znajdujący się w storage/filesystem.
klientSCP.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
klientSCP.upload("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
const klientSCP = ssh.initSCP()
// Wysyła plik znajdujący się w storage/filesystem.
klientSCP.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
klientSCP.upload("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
klientSCP = ssh.initSCP()
# Wysyła plik znajdujący się w storage/filesystem.
klientSCP.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Wysyła plik znajdujący się w katalogu głównym aplikacji.
klientSCP.upload("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
klientSCP = ssh.initSCP()
# Wysyła plik znajdujący się w storage/filesystem.
klientSCP.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Wysyła plik znajdujący się w katalogu głównym aplikacji.
klientSCP.upload("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
val klientSCP = ssh.initSCP()
// Wysyła plik znajdujący się w storage/filesystem.
klientSCP.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
klientSCP.upload("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
final klientSCP = ssh.initSCP()
// Wysyła plik znajdujący się w storage/filesystem.
klientSCP.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
klientSCP.upload("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
Aby pobrać (download) pliki z serwera do aplikacji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const klientSCP = ssh.initSCP()
// Pobiera plik do storage/filesystem.
klientSCP.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
klientSCP.download("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
const klientSCP = ssh.initSCP()
// Pobiera plik do storage/filesystem.
klientSCP.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
klientSCP.download("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
klientSCP = ssh.initSCP()
# Pobiera plik do storage/filesystem.
klientSCP.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Pobiera plik do katalogu głównego aplikacji.
klientSCP.download("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
klientSCP = ssh.initSCP()
# Pobiera plik do storage/filesystem.
klientSCP.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Pobiera plik do katalogu głównego aplikacji.
klientSCP.download("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
val klientSCP = ssh.initSCP()
// Pobiera plik do storage/filesystem.
klientSCP.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
klientSCP.download("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
final klientSCP = ssh.initSCP()
// Pobiera plik do storage/filesystem.
klientSCP.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
klientSCP.download("dokument.pdf", _app.file("dokument.pdf"))
klientSCP.close()
SFTP
SFTP to sposób transferu i manipulowania plikami i katalogami, który obsługuje te same funkcjonalności co FTP, ale z wykorzystaniem SSH.
Aby rozpocząć nową sesję 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()
Inicjuje obiekt SSHSFTP, który jest klientem sesji.
Tworzenie nowego katalogu zdalnie:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.createDirectory("sciezka/nowy-katalog")
sftp.createDirectory("sciezka/nowy-katalog")
sftp.createDirectory("sciezka/nowy-katalog")
sftp.createDirectory("sciezka/nowy-katalog")
sftp.createDirectory("sciezka/nowy-katalog")
sftp.createDirectory("sciezka/nowy-katalog")
Tworzy lub zastępuje zdalny plik przekazaną treścią tekstową:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.uploadText("katalog/plik.txt", "Moja treść!")
sftp.uploadText("katalog/plik.txt", "Moja treść!")
sftp.uploadText("katalog/plik.txt", "Moja treść!")
sftp.uploadText("katalog/plik.txt", "Moja treść!")
sftp.uploadText("katalog/plik.txt", "Moja treść!")
sftp.uploadText("katalog/plik.txt", "Moja treść!")
Pobiera zawartość tekstową zdalnego pliku:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const zawartoscZdalnegoPliku = sftp.downloadText("katalog/plik.txt")
_out.println(zawartoscZdalnegoPliku)
const zawartoscZdalnegoPliku = sftp.downloadText("katalog/plik.txt")
_out.println(zawartoscZdalnegoPliku)
zawartoscZdalnegoPliku = sftp.downloadText("katalog/plik.txt")
_out.println(zawartoscZdalnegoPliku)
zawartoscZdalnegoPliku = sftp.downloadText("katalog/plik.txt")
_out.println(zawartoscZdalnegoPliku)
val zawartoscZdalnegoPliku = sftp.downloadText("katalog/plik.txt")
_out.println(zawartoscZdalnegoPliku)
final zawartoscZdalnegoPliku = sftp.downloadText("katalog/plik.txt")
_out.println(zawartoscZdalnegoPliku)
Trwale usuwa zdalny plik:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteFile("katalog/plik.txt")
sftp.deleteFile("katalog/plik.txt")
sftp.deleteFile("katalog/plik.txt")
sftp.deleteFile("katalog/plik.txt")
sftp.deleteFile("katalog/plik.txt")
sftp.deleteFile("katalog/plik.txt")
Trwale usuwa zdalny katalog:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteDirectory("katalog")
sftp.deleteDirectory("katalog")
sftp.deleteDirectory("katalog")
sftp.deleteDirectory("katalog")
sftp.deleteDirectory("katalog")
sftp.deleteDirectory("katalog")
Wyświetla całą zawartość katalogu:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
for (const i of sftp.list("sciezka/katalog")) {
if (i.directory) {
_out.print("Katalog: ")
} else if (i.regularFile) {
_out.print("Plik: ")
} else {
_out.print("Inne: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for (const i of sftp.list("sciezka/katalog")) {
if (i.directory) {
_out.print("Katalog: ")
} else if (i.regularFile) {
_out.print("Plik: ")
} else {
_out.print("Inne: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for i in sftp.list("sciezka/katalog"):
if i.directory:
_out.print("Katalog: ")
elif i.regularFile:
_out.print("Plik: ")
else:
_out.print("Inne: ")
_out.println(i.name)
_out.println("<br/>")
sftp.list("sciezka/katalog").each do |i|
if i.directory
_out.print("Katalog: ")
elsif i.regularFile
_out.print("Plik: ")
else
_out.print("Inne: ")
end
_out.println(i.name)
_out.println("<br/>")
end
sftp.list("sciezka/katalog").forEach {
if (it.directory) {
_out.print("Katalog: ")
} else if (it.regularFile) {
_out.print("Plik: ")
} else {
_out.print("Inne: ")
}
_out.println(it.name)
_out.println("<br/>")
}
for (i in sftp.list("sciezka/katalog")) {
if (i.directory) {
_out.print("Katalog: ")
} else if (i.regularFile) {
_out.print("Plik: ")
} else {
_out.print("Inne: ")
}
_out.println(i.name)
_out.println("<br/>")
}
Zwraca listę obiektów typu SSHFile.
Aby przesłać (upload) pliki istniejące w aplikacji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Wysyła plik znajdujący się w storage/filesystem.
sftp.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
sftp.upload("dokument.pdf", _app.file("dokument.pdf"))
// Wysyła plik znajdujący się w storage/filesystem.
sftp.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
sftp.upload("dokument.pdf", _app.file("dokument.pdf"))
# Wysyła plik znajdujący się w storage/filesystem.
sftp.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Wysyła plik znajdujący się w katalogu głównym aplikacji.
sftp.upload("dokument.pdf", _app.file("dokument.pdf"))
# Wysyła plik znajdujący się w storage/filesystem.
sftp.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Wysyła plik znajdujący się w katalogu głównym aplikacji.
sftp.upload("dokument.pdf", _app.file("dokument.pdf"))
// Wysyła plik znajdujący się w storage/filesystem.
sftp.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
sftp.upload("dokument.pdf", _app.file("dokument.pdf"))
// Wysyła plik znajdujący się w storage/filesystem.
sftp.upload("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Wysyła plik znajdujący się w katalogu głównym aplikacji.
sftp.upload("dokument.pdf", _app.file("dokument.pdf"))
Aby pobrać (download) pliki z serwera do aplikacji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Pobiera plik do storage/filesystem.
sftp.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
sftp.download("dokument.pdf", _app.file("dokument.pdf"))
// Pobiera plik do storage/filesystem.
sftp.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
sftp.download("dokument.pdf", _app.file("dokument.pdf"))
# Pobiera plik do storage/filesystem.
sftp.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Pobiera plik do katalogu głównego aplikacji.
sftp.download("dokument.pdf", _app.file("dokument.pdf"))
# Pobiera plik do storage/filesystem.
sftp.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
# Pobiera plik do katalogu głównego aplikacji.
sftp.download("dokument.pdf", _app.file("dokument.pdf"))
// Pobiera plik do storage/filesystem.
sftp.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
sftp.download("dokument.pdf", _app.file("dokument.pdf"))
// Pobiera plik do storage/filesystem.
sftp.download("arkusz.xlsx", _storage.filesystem("server", "arkusz.xlsx").file())
// Pobiera plik do katalogu głównego aplikacji.
sftp.download("dokument.pdf", _app.file("dokument.pdf"))
Pamiętaj, aby zawsze zamykać sesję SFTP:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()