Copie d'un file à l'aide de SSH sur un tunnel avec transmission certifiée

J'ai besoin de find un moyen de copyr des files de mymachine vers un server priv-server privé assis sur un réseau NATted privé via un server pub-server avec une adresse IP publique. Le priv-server derrière la machine NAT ne possède que des certs pour l' user@mymachine , de sorte que les certs doivent être transférés de mymachine via pub-server vers priv-server

Donc, pour me connecter avec SSH avec une seule command, j'utilise:

 $ ssh -tA user@pub-server 'ssh user@priv-server' 

– cela fonctionne parfaitement bien. Les certificates sont transmis de mymachine à priv-server via pub-server , et tout est bien configuré.

Maintenant, j'utiliserais normalement scp pour tous les besoins de transfert de files, mais je ne suis pas au courant d'un moyen de transmettre toutes les informations de tunneling à scp .

    Au lieu de cela, utilisez une forme de copy de files de plus bas niveau en cat catinant localement et en les insérant dans une command remote cat > filename sur priv-server :

     $ cat file1.txt | ssh -A user@pub-server 'ssh user@priv-server "cat > file1.txt"' 

    ou avec compression:

     $ gzip -c file1.txt | ssh -A user@pub-server 'ssh user@priv-server "gunzip -c > file1.txt"' 

    Extraction de l' man ssh :

    -A Permet de transférer la connection de l'agent d'authentification. Cela peut également être spécifié par hôte dans un file de configuration.

    -t Force l'allocation pseudo-tty. Ceci peut être utilisé pour exécuter des programmes arbitraires basés sur l'écran sur une machine distante, ce qui peut être très utile, par exemple lors de la mise en œuvre de services de menu. Plusieurs options -t forcent l'allocation tty, même si ssh n'a pas de tty local.


    Au début, je n'étais pas au courant d'une réponse, mais après une bonne nuit de sumil et l'écriture de cette question, j'ai vu un problème avec la command que j'essayais initialement, corrigé et ça a fonctionné. Mais comme cela semble être une chose utile à faire, j'ai décidé de partager la réponse.

    Ce serait simple si vous essayez un sshfs natif qui est récemment ajouté.

    Installer sudo apt-get install sshfs

     sshfs -ttA user@pub-server ssh user@priv-server 

    Cela fera la magie.

    Pour plus d'informations, voir ici Linux Journal

    Au lieu de vous requestr comment faire face à une string complexe de transmissions SSH, séparez les problèmes.

    1. Configurez votre système pour avoir un access transparent à chaque hôte. Ceci est fait une fois pour toutes dans votre file ~/.ssh/config .

      Pour apprendre à SSH à utiliser une machine comme proxy sur une autre machine , déclarez une ProxyCommand .

       Host priv-server User user ProxyCommand ssh -W %h:%p -t user@pub-server 

      Activez également le partage de connection . Cela permet à plusieurs instances de clients d'utiliser le même canal, ce qui permet d'économiser le time d'établissement de la connection. En haut de votre .ssh/config (avant toute ligne Host ), ajoutez

       ControlMaster auto ControlPath ~/.ssh/control:%h:%p:%r 
    2. Si vous le pouvez, configurez l'authentification par key et le transfert d'agent pour que l'authentification soit complètement transperente. Si vous ne le pouvez pas, vous avez donc besoin d'une authentification interactive sur certains hôtes, il vous suffit de vous authentifier une fois par session ou après une panne réseau. Ouvrez une connection principale.

       ssh -Nf priv-server 
    3. Appelez normalement ssh (ou scp , sftp , sshfs , rsync , etc.).