Forum général.général copier avec scp un fichier au travers de deux serveurs

Posté par  .
Étiquettes : aucune
2
4
juil.
2010
Bonjour,

J'aimerais savoir si il est possible de faire la manipulation suivante en une seule ligne de commande.

Soit A et B 2 serveurs connectés à internet et C un serveur se trouvant sur le meme LAN que B.
Comment copier en une seule commande un fichier de C vers A.

Actuellement je duplique le fichier genere par C sur B via scp puis je fais un scp de A vers B mais ce n'est pas pratique.

Est ce que qqu connait la commande magique ?

D'avance merci
Guillaume
  • # Avec ProxyCommand

    Posté par  . Évalué à 7.

    Quand tu tapes "ssh A" depuis la machine C, tu peux demander à ssh de lancer une commande intermédiaire avant d'essayer de réellement se connecter à A. Cette commande intermédiaire permet de lancer elle-même une connexion ssh vers B d'abord.

    Concrètement, depuis la machine C, tu peux utiliser cette commande pour accéder en une fois à la machine A :
    ssh -o "ProxyCommand ssh B 'tcpconnect -ir %h %p' " A
    La chaîne %h est remplacée par le nom d'hôte que tu veux atteindre (A ici), et %p par le port utilisé par ssh (22 donc).

    Tu peux ajouter cette option dans ton fichier .ssh/config sur la machine C :
    Host A
    ProxyCommand ssh B "tcpconnect -ir %h %p"


    Tu peux ensuite utiliser directement depuis C la commande :
    scp blah A:
    scp exécutera d'abord la ProxyCommand, et une fois le proxy lancé, accédera à A au travers de ce proxy.
  • # heu...

    Posté par  . Évalué à 3.

    toi@B $ ssh C:rep/fichier A:rep/
    • [^] # Re: heu...

      Posté par  . Évalué à 1.

      s/ssh/scp/

      (J'aurais mieux fait de me relire avant de cliquer...)
    • [^] # Re: heu...

      Posté par  . Évalué à 2.

      Dans ton exemple, la copie passe par B.
      • [^] # Re: heu...

        Posté par  . Évalué à 2.

        Oui, mais la question demandait ... en une seule ligne de commande.
        Rien ne dit sur quelle machine on est au départ, ni qu'il ne faut pas passer par B...
        • [^] # Re: heu...

          Posté par  . Évalué à 2.

          Exact.
          B étant sur le même réseau que C,ta proposition n'est pas optimale mais elle est très facile à mettre en oeuvre (pas besoin de tester les ssh/scp imbriqués).
          • [^] # Re: heu...

            Posté par  . Évalué à 1.

            Le seul problème est que cette commande ne fonctionne pas.
            En fait, la commande
            scp C:rep/fichier A:rep/
            est aboslument équivalente à
            ssh C 'scp rep/fichier A:rep/'

            Ceci signifie que ça ne fonctionne que si l'on peut de connecter à A depuis C.

            Avec ce type de configuration, les données (ou en tout cas le flux de données) passeront forcément par B qui est la seule machine à voir A. La solution proposée par Florian doit bien marcher, à condition que tcpconnect (paquet tcputils sur Debian) soit installé sur B.

            Sinon, il est possible d'utiliser un tunnel via B, mais ça fait fait exécuter deux commandes :
            établissement du tunnel :
            ssh -f -n -N -L2222:C:22 B
            scp -P2222 rep/fichier: localhost:rep/
            (et ne pas oublier de killer le premier SSH pour fermer le tunnel).

            Il existe certainement pleins d'autres façons de faire, avec des performances variables : essaie de parcourir les pages de man de ssh en cherchant ce qui est relatif au tunneling et au proxy.

            A+
            JJD
  • # les entrée/sortie standard c'est fait pour être utilisé

    Posté par  (site web personnel) . Évalué à 3.

    c'est un peu brutal, mais c'est simple à retenir et ça fait très unix dans l'esprit.

    toi@A ssh B ssh C cat fichier_sur_c > fichier_sur_a

    ça fait deux ssh imbriqués, et la sortie standard du cat (qui est exécuté sur C) arrive directement sur ta machine sur A, il ,ne te reste qu'à la rediriger vers un fichier.

    si tu veux faire ça avec tout un répertoire, tu peux utiliser tar :

    toi@A ssh B ssh C tar cf - rep_sur_c | tar xvf -

    si vous avez la correction pour les fautes du titre ci-dessus je vous en saurai gré.
  • # Merci tout le monde pour ces exemples

    Posté par  . Évalué à 1.

    Merci,

    J'ai enfin qqc qui fonctionne

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.