64 votes

Scp via un proxy avec une seule commande depuis la machine locale?

J'ai ma machine locale, la machine proxy et la machine cible. La machine locale n'a pas de contact direct avec la machine cible, mais doit passer par la machine proxy.

Je veux copier un fichier de la machine cible vers la machine locale en utilisant scp. Est-il possible de le faire avec une seule commande depuis la machine locale ?

7voto

whaley Points 1556

Une seule ligne? Pas du premier coup. Vous devez d'abord établir un proxy et vous ne pouvez pas le faire avec scp seul.

Lorsque vous le faites manuellement, j'ouvre une session screen pour mon tunnel:

screen -S tunnel

Screen est utilisé pour maintenir le tunnel en cours dans un shell en arrière-plan. Utilisez la technique de votre choix pour garder le tunnel ouvert en arrière-plan (la réponse de @weeheavy est probablement la plus simple). Une fois dans la session screen, je démarre mon tunnel de la manière suivante

ssh -L 2222:cible.machine:22 [utilisateur@]proxy.machine

Pour décomposer cela, cela signifie essentiellement "Sur ma machine locale, ouvrez le port 2222 et toute connexion arrivant sur localhost: 2222 est proxifiée via proxy.machine jusqu'à cible.machine: 22"

Une fois que vous avez établi la connexion ssh et le tunnel, détachez-vous de la session screen avec "C-a d". Pour revenir à cette session screen, tapez screen -raAd tunnel

Une fois de retour dans votre shell d'origine, votre commande scp ressemblera à

scp -P 2222 localhost: votre/fichier/sur/cible.machine chemin/local

N'oubliez pas que le port localhost 2222 est en réalité juste un tunnel allant vers la machine cible.

4voto

NT. Points 109

Il semble que scp prend en charge l'option -o tout comme ssh le fait, bien que je ne sache pas comment lui transmettre un nom d'utilisateur/mot de passe pour le proxy :

scp -o "ProxyCommand=nc -X connect -x proxyhost:proxyport %h %p" remote_user@remote_host:remote_path local_path

Si vous obtenez nc: invalid option -- X voir ma réponse sur stackoverflow

1 votes

Super mec, ça a marché tout de suite :)

2voto

eggroll77 Points 19

Que diriez-vous de :

scp -o "ProxyCommand ssh user@myproxyserver.com nc %h %p" votre.fichier nom_utilisateur@votredestination.votredomaine.com:/emplacement_quelconque

0 votes

Est-ce que possible nom d'utilisateur:mot de passe ici ?

1voto

SamSPICA Points 919

Vous pourriez essayer quelque chose comme :

ssh user@proxy.machine "ssh user@target.machine 'cat > file'" < file

Mais cela ne fonctionnera pas si votre proxy.machine doit vous demander un mot de passe (car SSH n'est pas dans un TTY, donc askpass échouera).

Si vous avez plus d'un fichier, vous pourriez utiliser tar de cette manière (non testée, j'utilise généralement un netcat de cette façon) :

tar cf - file1 file2 folder1/ | ssh user@proxy.machine "ssh user@target.machine 'tar xvf -'"

1voto

lomai Points 11

Une autre solution simple pour transférer un fichier_source de l'hôte_source vers un hôte_destination via un hôte_proxy :

Connectez-vous sur le serveur_proxy :

ssh login@proxy_host

À partir du serveur proxy, transférez le fichier_source de l'hôte_source vers l'hôte_destination (vous pouvez taper ceci sur une ligne, en omettant le \, ou sur deux lignes, comme indiqué ci-dessous) :

scp login@source_host:/chemin_du_fichier_source \
  login@destination_host:/chemin_du_répertoire_destination

Cela nécessite que la connexion sur l'hôte_source vers l'hôte_proxy utilise une clé rsa.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X