Différences
Ci-dessous, les différences entre deux révisions de la page.
— |
technique:sftp [2019/11/30 08:50] (Version actuelle) qduchemi créée |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ## Utiliser le serveur SFTP de Picasoft | ||
+ | Un serveur SFTP tourne sur `pica02` et vise principalement à faciliter l'upload des artifacts et autres fichiers générés (par exemple par le [Graph Bot](https://gitlab.utc.fr/picasoft/projets/graph-bot)). | ||
+ | |||
+ | L'ensemble des fichiers téléversés sont ensuite accessibles via un serveur web public, consultable à l'adresse https://uploads.picasoft.net ; il faut connaître l'URL exacte pour accéder aux fichiers, l'`autoindex` n'étant pas activé. | ||
+ | |||
+ | On accède au SFTP avec les paramètres suivants : | ||
+ | |||
+ | * URL : picasoft.net | ||
+ | * Port : 2222 | ||
+ | * Identifiants : voir le [dépôt des identifiants](https://gitlab.utc.fr/picasoft/projets/graph-bot) : `Asso/SFTP/picasoft.net`. | ||
+ | |||
+ | Le chemin autorisé en écriture est `~/uploads`. Vous pouvez créer n'importe quel sous-dossier et téléverser vos fichiers. | ||
+ | |||
+ | Une fois le fichier uploadé, il est accessible sur le serveur web d'upload en supprimant le préfixe `uploads` du chemin. | ||
+ | Exemple : | ||
+ | |||
+ | * Vous uploadez un fichier `a.txt` dans `~/uploads/test` via SFTP, | ||
+ | * Le fichier est accessible à `uploads.picasoft.net/test/a.txt`. | ||
+ | |||
+ | Voici un snippet Python permettant d'automatiser l'upload : | ||
+ | |||
+ | ```python | ||
+ | import paramiko | ||
+ | |||
+ | # On suppose les variables hostname, port, login, password, base_path, et files connues | ||
+ | transport = paramiko.Transport((hostname, port)) | ||
+ | transport.connect(None, login, password) | ||
+ | try: | ||
+ | client = paramiko.SFTPClient.from_transport(transport) | ||
+ | except Exception as e: | ||
+ | print("Error creating SFTP client : {}".format(e)) | ||
+ | |||
+ | try: | ||
+ | client.listdir(base_path) | ||
+ | print("Folder already existing, skipping creation...") | ||
+ | except FileNotFoundError: | ||
+ | client.mkdir(base_path) | ||
+ | |||
+ | for f in files: | ||
+ | filename = os.path.basename(f) | ||
+ | try: | ||
+ | client.put(f, '{}/{}'.format(base_path, filename)) | ||
+ | print("File {} successfully uploaded!".format(filename)) | ||
+ | except Exception as e: | ||
+ | print('Error uploading file {0} : {1}'.format(f, e)) | ||
+ | ``` |