2010-06-29 3 views
3

J'ai une liste de fichiers sur la machine hôte disons dans le répertoire/src /. Le répertoire a plus de sous-répertoires. maintenant ce répertoire est copié sur la machine distante après le montage. Maintenant, les fichiers sont préréglés dans la machine distante dans le répertoire/dst.perl - gestion de fichier

Exemple. Si j'avais/src/a/f1,/src/b/f2 je vais avoir sur la machine distante/dst/a/f1,/dst/b/f2

Maintenant, je n'ai que des informations sur le répertoire hôte, hôte fichier. En utilisant cette information, comment accéder aux fichiers sur une machine distante en utilisant ssh dans perl. Je devrais cd à/dst et lire des fichiers à partir de là. Comment puis-je faire ce CD et lire dans une seule commande ssh.

Merci.

Répondre

2

Si vous voulez faire tout cela sans déléguer à /usr/bin/ssh, consultez Net::SSH2 et File::Spec

Vous aurez besoin scp_get (remote [, local ])

Il ressemblera à quelque chose comme ça.

use File::Spec(); 
use Net::SSH2(); 
my ($vol, $dir, $file) = File::Spec::splitpath($path); 
my @dirs = File::Spec::splitdir($dir); 

## Change the root dir 
$dirs[0] = 'dst'; # new_root_dir 

my $new_remote_path = File::Spec::catfile(@dirs, $file); 

    ## Almost right from Net::SSH2 SYNOPSIS 
    my $ssh2 = Net::SSH2->new(); 
    $ssh2->connect('example.com') or die $!; 
    if ($ssh2->auth_keyboard('fizban')) { 

     my $sftp = $ssh2->sftp(); 

     my $fh = $sftp->open('/etc/passwd') or die; 
     print $_ while <$fh>; 

     ## or $ssh2->scp_get($new_remote_path); 
    } 
0

Googling 'man ssh' arrive avec la page de manuel SSH. J'ai suivi le premier lien (http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1), d'où nous voyons ce qui suit. Les parties intéressantes sont spécifiées.

ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec] [-D orifice ] [-e escape_char] [-F configfile] [-i identity_file] [-L [bind_address:] port: hôte: hostport] [-l nom_login] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-R [adresse_lié:] port: hôte: hostport ] [-S ctl_path] [nom d'utilisateur @] nom d'hôte [commande]

...Ssh (client SSH) est un programme pour se connectant à une machine distante et pour exécutant des commandes sur une machine distante . Il est prévu de remplacer rlogin et rsh, et de fournir des communications chiffrées sécurisées entre deux hôtes non approuvés sur un réseau non sécurisé . Les connexions X11 et les ports TCP/IP arbitraires peuvent également être transférés sur le canal sécurisé . Ssh se connecte et se connecte au nom d'hôte spécifié (avec le nom d'utilisateur optionnel ). L'utilisateur doit prouver son identité à la machine distante en utilisant l'une des différentes méthodes en fonction de la version du protocole utilisée.

Si la commande est spécifiée, la commande est exécutée sur l'hôte distant au lieu de un shell de connexion.

, essayez ssh [email protected] ls -lR /src/, remplacer 'ls -lR' avec la commande que vous voulez réellement. Oh, et regardez la page de manuel pour le fichier d'identité - si vous avez des clés configurées, vous pouvez l'utiliser pour éviter de fournir un mot de passe à SSH sur la ligne de commande. Et assurez-vous que le chemin complet de votre fichier d'identité a des autorisations fortes, donc personne d'autre ne peut le lire/le remplacer/le modifier.

+0

Merci beaucoup ... :) – Anu

Questions connexes