IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Contrôle droits sur fichier distant (Aix, Linux, Windows)


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Points : 138
    Points
    138
    Par défaut Contrôle droits sur fichier distant (Aix, Linux, Windows)
    Bonjour,

    j'ai écrit sur un serveur de servitudes un script de transfert de fichiers inter-plateformes : copie en local d'un ou plusieurs fichiers depuis un serveur Linux, Windows ou Aix, puis action sur le fichier source du serveur distant (effacement, suppression), ensuise copie vers un serveur de destination (Aix, Linux, Window) en mode remplacement ou en append.

    Les transferts de type Unix se font avec scp, ceux de type Windows avec sbmclient.

    Pour un même process, on peut être amené à copier plusieurs fichiers.
    Je souhaite avant de procéder aux transferts vérifier qu'il n'y a pas de problème technique (host up, droits...) et d'entamer les transferts que si tout est OK.

    Existe-t-il des modules ou des snippets pour tester la disponibilité d'un fichier distant sur un système Windows et Unix en sachant que je peux être amené à effacer ou supprimer le fichier ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Le mieux est sans doute de se connecter en ssh pour faire toutes les vérifications nécessaires. Si la machine hôte est en rade, tu le verras tout de suite. Et les vérifications de présence de fichiers sont faciles. Tu peux utiliser un module comme Net::SSH ainsi que certains modules ou sous-modules additionnels.

    Sinon, as-tu la possibilité d'installer et de lancer un script Perl sur la machine distante (autrement dit, Perl est-il installé et disponible sur ces bécanes)? Cela peut simplifier assez fortement la donne si les opérations à faire sont toujours les mêmes.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Points : 138
    Points
    138
    Par défaut
    Perl est installé sur les Aix et les Linux, pas sur les Windows.
    Je vais regarder du côté du module Net::SSH(2), il me semble qu'il y a aussi des modules autour de smb.

    Mon script fonctionne déjà, mais sans les contrôles préalables. Si le transfert plante, je récupère bien l'erreur.
    Par contre, dans le cas d'un lot de fichiers, j'ai eu récemment un plantage sur le 3ème fichier et on arrive à un état non cohérent sur la machine cible.
    Le but est de faire le maximum de contrôle avant pour s'assurer au maximum de l'intégralité du transfert.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Points : 138
    Points
    138
    Par défaut
    j'utilise smbclient pour récupérer ou transférer un fichier sur le serveur Windows distant. Je peux aussi lister les fichiers d'un répertoire.
    Les commandes disponibles avec smbclient ressemblent à celles de ftp
    https://www.samba.org/samba/docs/man...bclient.1.html

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Points : 138
    Points
    138
    Par défaut
    J'ai bossé sur la partie SSH.
    Ci-après, un exemple de code que nous allons adapter et intégrer dans notre outil de transfert.
    Si quelque chose vous alerte sur les fonctionnalités mises en oeuvre, n'hésitez pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Net::SFTP::Foreign;
    use Net::SSH::Perl;
    use Fcntl qw ':mode';
    use feature 'say';
     
    my $host = shift;
    my $dir  = "/ficdata/transfert/tests_pto";
     
     
    # uid/gid sur serveur distant
     
    my @keyfile = ("$ENV{'HOME'}/.ssh/id_rsa");
    my $sshobj = Net::SSH::Perl->new($host, identity_files=>\@keyfile);
    $sshobj->login();
     
    my ($rmt_uid, $rmt_gids, $std_err, $rc);
     
    my $cmd = '/usr/bin/id -u ' . $ENV{'USER'};
    ($rmt_uid, $std_err, $rc) = $sshobj->cmd($cmd);
    chomp($rmt_uid);
     
    $cmd = '/usr/bin/id -G ' . $ENV{'USER'};
    ($rmt_gids, $std_err, $rc) = $sshobj->cmd($cmd);
    chomp($rmt_gids);
    my @rmt_gids = split (/ /, $rmt_gids);
     
    say "remote uid    : $rmt_uid";
    say "remote gid(s) : @rmt_gids";
     
     
    # connexion
    my $sftp = Net::SFTP::Foreign->new($host);
     
    if ( $sftp->error) {
        say "Impossible d'établir une connexion SSH avec l'hôte distant $host : " . $sftp->error;
        exit 99;
    } else {
        say "Connexion SSH avec l'hôte distant $host : OK";
    }
     
    # traitement répertoire
    my @files = $sftp->glob("$dir/*", names_only => 1);
    my $nb_files = @files; # nombre de fichiers retourné
     
    foreach my $f (@files) {
     
        say $f;
        my $mode = $sftp->stat($f);
     
        if ( $sftp->status ) {
            say "Impossible d'obtenir les informations stat du fichier $f sur le serveur distant $host : " . $sftp->status;
        } else {
            foreach my $key (sort keys(%$mode)) {
                if ( $key eq 'perm' ) {
                    my $perms = sprintf "%04o", $$mode{$key} & 07777;
                    say "Permissions : $perms";
     
                    my $auths = $mode->perm;
     
                    my $user_read  = ($auths & S_IRUSR) >> 6;
                    my $user_write = ($auths & S_IWUSR) >> 6;
     
                    my $group_read  = ($auths & S_IRGRP) >> 3;
                    my $group_write = ($auths & S_IWGRP) >> 3;
     
                    my $other_read  = ($auths & S_IROTH);
                    my $other_write = ($auths & S_IWOTH);
     
                    say "user  read write $user_read $user_write";
                    say "group read write $group_read $group_write";
                    say "other read write $other_read $other_write";
     
                } elsif ($key =~ /uid|gid/ ) {
                    say $key . ' ' . $$mode{$key};
                }
            }
        }
    }
    Sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    remote uid    : 500
    remote gid(s) : 500 502 503
    Connexion SSH avec l'hôte distant rvmlpnh01 : OK
    /ficdata/transfert/tests_pto/file_26-02.txt
    gid 500
    Permissions : 0000
    user  read write 0 0
    group read write 0 0
    other read write 0 0
    uid 505
    /ficdata/transfert/tests_pto/file_26-03.txt
    gid 500
    Permissions : 0644
    user  read write 4 2
    group read write 4 0
    other read write 4 0
    uid 505
    /ficdata/transfert/tests_pto/file_26-01.txt
    gid 500
    Permissions : 0644
    user  read write 4 2
    group read write 4 0
    other read write 4 0
    uid 505

    Merci

Discussions similaires

  1. Linux, Tomcat et droits sur fichiers
    Par hapalemur dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 14/10/2008, 10h47
  2. Remplacement carac X'0D' par X'0D25' sur fichier txt AIX
    Par Ange_de_la_nuit dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 23/12/2006, 09h12
  3. fseek sur fichiers distants
    Par Xris dans le forum Langage
    Réponses: 25
    Dernier message: 19/12/2006, 17h39
  4. Intégrer un appli clique droit sur fichier
    Par ducseb dans le forum Windows XP
    Réponses: 1
    Dernier message: 13/12/2006, 21h17
  5. Tester et récupérer des infos sur fichier distant
    Par cybertj dans le forum Langage
    Réponses: 2
    Dernier message: 17/05/2006, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo