You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

4.8 KiB

version pylint Build Status License Language

Scrippy, mon ami le scrangourou

scrippy_remote

Client SSH/SFTP/FTP pour le cadriciel Scrippy.

Avertissement

Ce dépôt est un dépôt public librement distribué y compris sur Internet. Le code qu'il contient ainsi que l'ensemble des configurations et documentations ne doit pas contenir d'informations sensibles telles que, et sans se limiter à, mots de passe et clefs privées.

Prérequis

Modules Python

Liste des modules nécessaires

  • Aucun

Installation

Manuelle

git clone https://git.mcos.nc/scrippy/scrippy-remote.git
cd scrippy-remote.git
sudo python3 -m pip install -r requirements.txt
make install

Avec pip

sudo pip3 install scrippy-remote

Utilisation

scrippy_remote

Ce module offre l'ensemble des objets, méthodes et fonctions permettant les opérations sur les hôtes distants accessibles via SSH/SFTP ou FTP:

  • Exécution de commandes sur hôte distant
  • Copie de répertoires/fichiers sur hôte distant
  • Suppression de répertoires/fichiers sur hôte distant
  • Copie de fichiers entre hôtes distants (la machine locale agissant comme tampon)
  • ...

Attention: Il appartient au développeur du script de penser à fermer la connexion après usage.

Le module scrippy_remote.remote fournit plusieurs objets pour transférer des fichiers via SFTP ou FTP(es) pour transférer des fichiers et SSH pour l'exécution distante de commandes.

Le code source du module scrippy_remote.remote et de ses sous-modules est également largement commenté et reste la meilleure source de documentation.

Exécuter une commande sur un hôte distant:

import logging
from scrippy_remote import remote

remote_host = "srv.flying.circus"
remote_port = 22
remote_user = "luigi.vercotti"
key_filename = "/home/luigi.vercotti/.ssh/id_rsa"
password = "dead_parrot"

with remote.Ssh(username=remote_user,
                hostname=remote_host,
                port=remote_port,
                key_filename=key_filename,
                password=password) as host:
  stdout = host.exec_command("ls /home/luigi.vercotti", return_stdout=True)
  if stdout["exit_code"] == 0:
    for line in stdout["stdout"]:
      logging.info(line)

Récupérer un fichier distant:

import logging
from scrippy_remote.remote import Ssh
from scrippy_remote import ScrippyRemoteError

remote_host = "srv.flying.circus"
remote_port = 22
remote_user = "luigi.vercotti"
remote_path = "/home/luigi.vercotti/piranha_brothers_files"
key_filename = "/home/luigi.vercotti/.ssh/id_rsa"
password = "dead_parrot"
local_path = "/home/harry.fink"
pattern = ".*"
recursive = True
delete = False
exit_on_error = True

with remote.Ssh(username=remote_user,
                hostname=remote_host,
                port=remote_port,
                key_filename=key_filename,
                password=password) as host:
  try:
    err = host.sftp_get(remote_path=remote_path,
                        local_path=local_path,
                        pattern=pattern,
                        recursive=recursive,
                        delete=delete,
                        exit_on_error=exit_on_error)
    logging.info("Errors: {}".format(err))
  except ScrippyRemoteError as e:
    logging.critical("{}".format(e))

Transférer des fichiers vers un hôte distant:

from scrippy_remote.remote import Ssh
from scrippy_remote import ScrippyRemoteError

remote_host = "srv.flying.circus"
remote_port = 22
remote_user = "luigi.vercotti"
remote_path = "/home/luigi.vercotti"
key_filename = "/home/luigi.vercotti/.ssh/id_rsa"
password = "dead_parrot"
local_path = "/home/harry.fink"
pattern = ".*"
recursive = True
delete = True
exit_on_error = True

with Ssh(username=remote_user,
         hostname=remote_host,
         port=remote_port,
         key_filename=key_filename) as host:
  try:
    err = host.sftp_put(local_path=local_path,
                        remote_path=remote_path,
                        pattern=pattern,
                        recursive=recursive,
                        delete=delete,
                        exit_on_error=exit_on_error)
    logging.info("Errors: {}".format(err))
  except ScrippyRemoteError as e:
    logging.critical("{}".format(e))

Le module fournit d'autres fonctionnalités (listage des fichiers distants, transfert via FTP, etc).