SSH-client
Commando's op de server uitvoeren en bestanden overdragen.
Inleiding
Netuno heeft in zijn low-code framework een SSH-client geïntegreerd, waarmee je verbinding kunt maken met servers, commando's kunt uitvoeren, bestanden kunt verzenden en ontvangen, mappen kunt wijzigen, en andere externe bewerkingen kunt uitvoeren.
Het ondersteunt meerdere gelijktijdige verbindingen, en ook SCP en SFTP.
Dit dankzij de Java- en open-source-implementatie
SSHJ, die het Netuno mogelijk maakt
deze functionaliteiten aan alle scripttalen te bieden via de functie _ssh.
Meer over de functie SSH van Netuno.
Configuratie
De eerste stap is het configureren van de SSH-toegangsgegevens die Netuno zal gebruiken om de verbinding tot stand te brengen.
Navigeer binnen de applicatie die je aan het ontwikkelen bent naar het configuratiebestand van de omgeving. In dit voorbeeld gebruiken we het ontwikkelingsbestand, dat zich bevindt in:
config/_development.json
Controleer of er SSH-configuraties aanwezig zijn; als die er niet zijn, voeg dan aan het einde van het configuratiebestand (in JSON-formaat) de SSH-configuratieparameters toe, bijvoorbeeld:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "mijn.server.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
Na het opslaan van de wijzigingen volstaat het Netuno opnieuw op te starten om de wijzigingen in de configuratie over te nemen. Dit zijn de
standaardconfiguraties voor de verbinding, zoals de naam van de sleutel default aangeeft.
Je kunt meer SSH-verbindingsconfiguraties toevoegen met andere sleutels in de JSON.
Om meer SSH-verbindingsconfiguraties toe te voegen, volstaat het het standaardconfiguratieblok te herhalen en de sleutel
default te vervangen door een andere naar keuze, bijvoorbeeld:
{
...
"ssh": {
"default": {
"enabled": true,
"host": "mijn.server.net",
"port": 22,
"username": "root",
"password": "$eCr37"
},
"overig": {
"enabled": true,
"host": "mijn.andere-server.net",
"port": 22,
"username": "root",
"password": "$eCr37"
}
},
...
}
De bovenstaande configuratie maakt het mogelijk de account default te gebruiken wanneer er als volgt wordt gecodeerd:
- 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()
Om de configuratie overig te gebruiken, volstaat het de sleutel van de configuratie als parameter van de functie
_ssh.init() toe te voegen, als volgt:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshOverig = _ssh.init("overig")
const sshOverig = _ssh.init("overig")
sshOverig = _ssh.init("overig")
sshOverig = _ssh.init("overig")
val sshOverig = _ssh.init("overig")
final sshOverig = _ssh.init("overig")
Als je geen configuratienaam als parameter toevoegt, wordt de configuratie van de account
defaultgebruikt.
Verbinding
Voordat je iets kunt doen, moet je de SSH-verbinding starten:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
ssh.connect()
Commando's
Om commando's uit te voeren, moet je een commando-sessie starten:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSessie = ssh.initSession()
const sshSessie = ssh.initSession()
sshSessie = ssh.initSession()
sshSessie = ssh.initSession()
val sshSessie = ssh.initSession()
final sshSessie = ssh.initSession()
Bij het uitvoeren van een commando wordt een object geleverd dat de status van de uitvoering en de bijbehorende gegevensuitvoer (output) bevat, bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshCommandoResultaat = sshSessie.exec("ls -rato")
if (sshCommandoResultaat.ok) {
_out.println("Succesvol uitgevoerd:")
_out.println(sshCommandoResultaat.output())
} else {
_out.println("Het commando is mislukt:")
_out.println(sshCommandoResultaat.error())
}
const sshCommandoResultaat = sshSessie.exec("ls -rato")
if (sshCommandoResultaat.ok) {
_out.println("Succesvol uitgevoerd:")
_out.println(sshCommandoResultaat.output())
} else {
_out.println("Het commando is mislukt:")
_out.println(sshCommandoResultaat.error())
}
sshCommandoResultaat = sshSessie.exec("ls -rato")
if sshCommandoResultaat.ok:
_out.println("Succesvol uitgevoerd:")
_out.println(sshCommandoResultaat.output())
else:
_out.println("Het commando is mislukt:")
_out.println(sshCommandoResultaat.error())
sshCommandoResultaat = sshSessie.exec("ls -rato")
if sshCommandoResultaat.ok
_out.println("Succesvol uitgevoerd:")
_out.println(sshCommandoResultaat.output())
else
_out.println("Het commando is mislukt:")
_out.println(sshCommandoResultaat.error())
end
val sshCommandoResultaat = sshSessie.exec("ls -rato")
if (sshCommandoResultaat.ok) {
_out.println("Succesvol uitgevoerd:")
_out.println(sshCommandoResultaat.output())
} else {
_out.println("Het commando is mislukt:")
_out.println(sshCommandoResultaat.error())
}
final sshCommandoResultaat = sshSessie.exec("ls -rato")
if (sshCommandoResultaat.ok) {
_out.println("Succesvol uitgevoerd:")
_out.println(sshCommandoResultaat.output())
} else {
_out.println("Het commando is mislukt:")
_out.println(sshCommandoResultaat.error())
}
Het object dat door het commando wordt geretourneerd is het SSHExecResult.
Vergeet niet de sessie altijd te sluiten:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sshSessie.close()
sshSessie.close()
sshSessie.close()
sshSessie.close()
sshSessie.close()
sshSessie.close()
SCP
Via SCP kunnen we bestanden verzenden en ontvangen.
Om een tekstbestand aan te maken vanuit een string en de inhoud van het aangemaakte bestand te downloaden, zie het voorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Maakt het tekstbestand aan.
sshSCP.uploadText("hallo.txt", "Hallo! Mijn inhoud hier...")
// Downloadt en toont de inhoud van het bestand.
_out.println(sshSCP.downloadText("hallo.txt"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Maakt het tekstbestand aan.
sshSCP.uploadText("hallo.txt", "Hallo! Mijn inhoud hier...")
// Downloadt en toont de inhoud van het bestand.
_out.println(sshSCP.downloadText("hallo.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Maakt het tekstbestand aan.
sshSCP.uploadText("hallo.txt", "Hallo! Mijn inhoud hier...")
# Downloadt en toont de inhoud van het bestand.
_out.println(sshSCP.downloadText("hallo.txt"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Maakt het tekstbestand aan.
sshSCP.uploadText("hallo.txt", "Hallo! Mijn inhoud hier...")
# Downloadt en toont de inhoud van het bestand.
_out.println(sshSCP.downloadText("hallo.txt"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Maakt het tekstbestand aan.
sshSCP.uploadText("hallo.txt", "Hallo! Mijn inhoud hier...")
// Downloadt en toont de inhoud van het bestand.
_out.println(sshSCP.downloadText("hallo.txt"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Maakt het tekstbestand aan.
sshSCP.uploadText("hallo.txt", "Hallo! Mijn inhoud hier...")
// Downloadt en toont de inhoud van het bestand.
_out.println(sshSCP.downloadText("hallo.txt"))
sshSCP.close()
Om bestanden die in de applicatie bestaan te verzenden (upload):
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Verstuurt een bestand dat in de storage/filesystem staat.
sshSCP.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sshSCP.upload("document.pdf", _app.file("document.pdf"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Verstuurt een bestand dat in de storage/filesystem staat.
sshSCP.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sshSCP.upload("document.pdf", _app.file("document.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Verstuurt een bestand dat in de storage/filesystem staat.
sshSCP.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sshSCP.upload("document.pdf", _app.file("document.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Verstuurt een bestand dat in de storage/filesystem staat.
sshSCP.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sshSCP.upload("document.pdf", _app.file("document.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Verstuurt een bestand dat in de storage/filesystem staat.
sshSCP.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sshSCP.upload("document.pdf", _app.file("document.pdf"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Verstuurt een bestand dat in de storage/filesystem staat.
sshSCP.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sshSCP.upload("document.pdf", _app.file("document.pdf"))
sshSCP.close()
Om bestanden van de server naar de applicatie te downloaden:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sshSCP = ssh.initSCP()
// Downloadt het bestand naar de storage/filesystem.
sshSCP.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sshSCP.download("document.pdf", _app.file("document.pdf"))
sshSCP.close()
const sshSCP = ssh.initSCP()
// Downloadt het bestand naar de storage/filesystem.
sshSCP.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sshSCP.download("document.pdf", _app.file("document.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Downloadt het bestand naar de storage/filesystem.
sshSCP.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Downloadt het bestand naar de hoofdmap van de applicatie.
sshSCP.download("document.pdf", _app.file("document.pdf"))
sshSCP.close()
sshSCP = ssh.initSCP()
# Downloadt het bestand naar de storage/filesystem.
sshSCP.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Downloadt het bestand naar de hoofdmap van de applicatie.
sshSCP.download("document.pdf", _app.file("document.pdf"))
sshSCP.close()
val sshSCP = ssh.initSCP()
// Downloadt het bestand naar de storage/filesystem.
sshSCP.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sshSCP.download("document.pdf", _app.file("document.pdf"))
sshSCP.close()
final sshSCP = ssh.initSCP()
// Downloadt het bestand naar de storage/filesystem.
sshSCP.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sshSCP.download("document.pdf", _app.file("document.pdf"))
sshSCP.close()
SFTP
SFTP is een manier van overdracht en bewerking van bestanden en mappen die dezelfde functionaliteiten ondersteunt als FTP, maar gebruikmaakt van SSH.
Om een nieuwe SFTP-sessie te starten:
- 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()
Start het object SSHSFTP, de client van de sessie.
Een nieuwe map op afstand aanmaken:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.createDirectory("pad/nieuwe-map")
sftp.createDirectory("pad/nieuwe-map")
sftp.createDirectory("pad/nieuwe-map")
sftp.createDirectory("pad/nieuwe-map")
sftp.createDirectory("pad/nieuwe-map")
sftp.createDirectory("pad/nieuwe-map")
Maakt het externe bestand aan of vervangt het met de doorgegeven tekstinhoud:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.uploadText("map/bestand.txt", "Mijn inhoud!")
sftp.uploadText("map/bestand.txt", "Mijn inhoud!")
sftp.uploadText("map/bestand.txt", "Mijn inhoud!")
sftp.uploadText("map/bestand.txt", "Mijn inhoud!")
sftp.uploadText("map/bestand.txt", "Mijn inhoud!")
sftp.uploadText("map/bestand.txt", "Mijn inhoud!")
Haalt de tekstinhoud van een extern bestand op:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const inhoudExternBestand = sftp.downloadText("map/bestand.txt"))
_out.println(inhoudExternBestand)
const inhoudExternBestand = sftp.downloadText("map/bestand.txt"))
_out.println(inhoudExternBestand)
inhoudExternBestand = sftp.downloadText("map/bestand.txt"))
_out.println(inhoudExternBestand)
inhoudExternBestand = sftp.downloadText("map/bestand.txt"))
_out.println(inhoudExternBestand)
val inhoudExternBestand = sftp.downloadText("map/bestand.txt"))
_out.println(inhoudExternBestand)
final inhoudExternBestand = sftp.downloadText("map/bestand.txt"))
_out.println(inhoudExternBestand)
Verwijdert een extern bestand definitief:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteFile("map/bestand.txt")
sftp.deleteFile("map/bestand.txt")
sftp.deleteFile("map/bestand.txt")
sftp.deleteFile("map/bestand.txt")
sftp.deleteFile("map/bestand.txt")
sftp.deleteFile("map/bestand.txt")
Verwijdert de externe map definitief:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.deleteDirectory("map")
sftp.deleteDirectory("map")
sftp.deleteDirectory("map")
sftp.deleteDirectory("map")
sftp.deleteDirectory("map")
sftp.deleteDirectory("map")
Toont de volledige inhoud van een map:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
for (const i of sftp.list("pad/map")) {
if (i.directory) {
_out.print("Map: ")
} else if (i.regularFile) {
_out.print("Bestand: ")
} else {
_out.print("Overig: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for (const i of sftp.list("pad/map")) {
if (i.directory) {
_out.print("Map: ")
} else if (i.regularFile) {
_out.print("Bestand: ")
} else {
_out.print("Overig: ")
}
_out.println(i.name)
_out.println("<br/>")
}
for i in sftp.list("pad/map":
if i.directory:
_out.print("Map: ")
elif i.regularFile:
_out.print("Bestand: ")
else:
_out.print("Overig: ")
_out.println(i.name)
_out.println("<br/>")
}
sftp.list("pad/map").each do |i|
if i.directory
_out.print("Map: ")
elsif i.regularFile
_out.print("Bestand: ")
else
_out.print("Overig: ")
end
_out.println(i.name)
_out.println("<br/>")
end
sftp.list("pad/map").forEach {
if (it.directory) {
_out.print("Map: ")
} else if (it.regularFile) {
_out.print("Bestand: ")
} else {
_out.print("Overig: ")
}
_out.println(it.name)
_out.println("<br/>")
}
for (i in sftp.list("pad/map")) {
if (i.directory) {
_out.print("Map: ")
} else if (i.regularFile) {
_out.print("Bestand: ")
} else {
_out.print("Overig: ")
}
_out.println(i.name)
_out.println("<br/>")
}
Retourneert een lijst met objecten van het type SSHFile.
Om bestanden die in de applicatie bestaan te verzenden (upload):
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Verstuurt een bestand dat in de storage/filesystem staat.
sftp.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sftp.upload("document.pdf", _app.file("document.pdf"))
// Verstuurt een bestand dat in de storage/filesystem staat.
sftp.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sftp.upload("document.pdf", _app.file("document.pdf"))
# Verstuurt een bestand dat in de storage/filesystem staat.
sftp.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sftp.upload("document.pdf", _app.file("document.pdf"))
# Verstuurt een bestand dat in de storage/filesystem staat.
sftp.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sftp.upload("document.pdf", _app.file("document.pdf"))
// Verstuurt een bestand dat in de storage/filesystem staat.
sftp.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sftp.upload("document.pdf", _app.file("document.pdf"))
// Verstuurt een bestand dat in de storage/filesystem staat.
sftp.upload("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Verstuurt een bestand dat in de hoofdmap van de applicatie staat.
sftp.upload("document.pdf", _app.file("document.pdf"))
Om bestanden van de server naar de applicatie te downloaden:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Downloadt het bestand naar de storage/filesystem.
sftp.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sftp.download("document.pdf", _app.file("document.pdf"))
// Downloadt het bestand naar de storage/filesystem.
sftp.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sftp.download("document.pdf", _app.file("document.pdf"))
# Downloadt het bestand naar de storage/filesystem.
sftp.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Downloadt het bestand naar de hoofdmap van de applicatie.
sftp.download("document.pdf", _app.file("document.pdf"))
# Downloadt het bestand naar de storage/filesystem.
sftp.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
# Downloadt het bestand naar de hoofdmap van de applicatie.
sftp.download("document.pdf", _app.file("document.pdf"))
// Downloadt het bestand naar de storage/filesystem.
sftp.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sftp.download("document.pdf", _app.file("document.pdf"))
// Downloadt het bestand naar de storage/filesystem.
sftp.download("spreadsheet.xlsx", _storage.filesystem("server", "spreadsheet.xlsx").file())
// Downloadt het bestand naar de hoofdmap van de applicatie.
sftp.download("document.pdf", _app.file("document.pdf"))
Vergeet niet de SFTP-sessie altijd te sluiten:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()
sftp.close()