SSH et SFTP
Exécutez des commandes et déplacez des fichiers sur un serveur distant depuis un workflow, et ce que le serveur distant doit fournir
Les blocs SSH et SFTP (outils scrydon:ssh:* et scrydon:sftp:*) se connectent à un serveur distant avec le client OpenSSH fourni avec la plateforme. Ils peuvent exécuter des commandes et des scripts, et ils peuvent lister, lire, écrire, téléverser, télécharger, déplacer et supprimer des fichiers.
Champs de connexion
| Champ | Règles |
|---|---|
| Host | Un nom d'hôte DNS (sftp.example.com), une adresse IPv4 (10.0.0.12) ou une adresse IPv6, avec ou sans crochets (fe80::1 ou [fe80::1]). Il ne doit pas commencer par -, et il ne doit contenir ni espace, ni caractère de contrôle, ni @, ni /. Indiquez le port dans le champ Port, pas dans l'hôte. |
| Port | 1–65535. Vaut 22 par défaut. |
| Username | Le nom de connexion. Il ne doit pas commencer par -, et il ne doit contenir ni espace, ni caractère de contrôle, ni @, :, /, [ ou ]. |
| Password ou Private key | Vous avez besoin de l'un des deux. L'authentification par mot de passe doit être activée sur le serveur. Les clés privées chiffrées (protégées par une phrase secrète) ne sont pas prises en charge : utilisez donc une clé non chiffrée ou un mot de passe. |
| Trusted host key | Facultatif, mais recommandé. Il s'agit de la clé d'hôte publique du serveur sur une seule ligne, sous la forme <key-type> <base64> (par exemple ssh-ed25519 AAAAC3Nza…). Lorsque vous la définissez, la connexion est refusée si le serveur présente une autre clé, sur n'importe quel port. Lorsque vous la laissez vide, la vérification de la clé d'hôte est désactivée. |
Si une requête enfreint l'une de ces règles, elle échoue avec un HTTP 400. La réponse nomme le champ et la règle, et rien n'est envoyé au serveur. Ces règles existent parce que le nom d'utilisateur et l'hôte sont transmis au client OpenSSH : une valeur commençant par - serait donc lue comme une option du client. Un [ ou un ] dans le nom d'utilisateur est refusé pour une raison similaire : scp traiterait le chemin distant comme un chemin local.
Ce que le serveur distant doit fournir
Le téléversement et le téléchargement utilisent scp. Toutes les autres opérations sont des commandes ordinaires qui s'exécutent dans le shell de connexion du compte distant :
| Opération | Commande distante |
|---|---|
| Execute Command | votre commande telle quelle, après cd <working directory> && lorsque vous en définissez un |
| Execute Script | bash -s, avec le script sur l'entrée standard (après cd <working directory> && lorsque vous en définissez un) |
| Lister un répertoire / SFTP List Files | ls -lA --color=never |
| Lire un fichier | cat |
| Écrire un fichier | cat >, avec le contenu sur l'entrée standard |
| Supprimer un fichier / SFTP Delete File | rm |
| Créer un répertoire / SFTP Create Directory | mkdir -p |
| Déplacer / renommer | mv |
| Check File Exists | test -e, puis echo |
| Check Command Exists | command -v, puis echo $? |
| Get System Info | uname -a, hostname et uptime, joints avec echo |
| Téléversement / téléchargement | scp via le sous-système SFTP du serveur. Un téléchargement qui échoue sans diagnostic est retenté une fois via l'ancien protocole scp, qui exécute scp sur le serveur, mais uniquement lorsque le chemin distant ne contient aucun caractère spécial du shell |
Le compte a donc besoin d'un shell POSIX disposant de ces commandes (GNU coreutils ou BusyBox) sur son canal d'exécution, et Execute Script nécessite également bash. Un serveur qui n'offre que le sous-système SFTP ne peut pas les exécuter. Les serveurs de démonstration publics limités au SFTP, comme test.rebex.net, répondent aux opérations de listage, de suppression et de création de répertoire avec le code de sortie 127 (commande introuvable). Les téléchargements depuis ces serveurs peuvent néanmoins fonctionner.
Erreurs
- Une commande distante qui échoue est signalée sous la forme
<operation> failed (exit <code>): <diagnostic>. Le diagnostic est la sortie stderr de la commande, ou sa sortie stdout lorsque stderr est vide. Un chemin inexistant, une erreur de permission et une commande manquante sont tous des erreurs. List ne les transforme jamais en listage vide. (spawn failed)signifie que le client OpenSSH n'a pas pu être démarré côté plateforme. Il s'agit d'un problème de la plateforme, pas d'un problème de votre serveur.- Check File Exists et Check Command Exists ne répondent
falseque lorsque le shell distant l'indique. Si la connexion échoue, ils signalent une erreur à la place.
Chemins locaux
Upload et Download lisent et écrivent des fichiers locaux dans la zone de préparation de la plateforme. Le chemin local doit être absolu et doit rester à l'intérieur de /tmp/scrydon-* une fois les segments .. résolus.