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.
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
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
Appelez normalement ssh
(ou scp
, sftp
, sshfs
, rsync
, etc.).