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 ?

73voto

Stephan Kolassa Points 1619

Vous pouvez faire cela avec ProxyJump. mettez ceci dans votre fichier ~/.ssh/config (créez le fichier s'il n'existe pas):

Host target.machine
User targetuser
HostName target.machine
ProxyJump proxyuser@proxy.machine

Après avoir enregistré le fichier, vous pouvez simplement utiliser

ssh target.machine

chaque fois que vous voulez vous connecter. Scp fonctionnera également car il respecte également le fichier de configuration ssh. Nautilus fonctionnera également, si vous utilisez GNOME et que vous souhaitez utiliser une interface graphique.

Ancienne réponse (pour les anciennes versions d'OpenSSH)

Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

6 votes

Juste une petite note. Si vous utilisez un fichier d'identité alternatif via l'option de ligne de commande -i pour ssh, vous devez spécifier cette option à la fois pour la configuration ProxyCommand et la ligne de commande ssh.

7 votes

3 choses qui pourraient aider, 1) il serait utile si vous montriez également les lignes Host proxy.machine dans le même fichier ~/.ssh/config, 2) Mentionnez si ces commandes peuvent être imbriquées (c'est-à-dire que le client se connecte à l'hôte proxy 1 qui se connecte à l'hôte proxy 2 qui se connecte à... cible) et 3) ce que signifie nc %h %p

0 votes

Comment pouvons-nous copier de la machine locale vers la machine cible avec un proxy?

32voto

pxice Points 1

Vous pouvez maintenant le faire en une seule ligne, sans avoir besoin de nc n'importe où:

scp -o "ProxyCommand ssh pcreds@proxy.machine -W %h:%p" tcreds@target.machine:file .

Explication

pcreds et tcreds représentent vos identifiants de proxy et de cible si nécessaire (nom d'utilisateur, nom d'utilisateur:mot de passe, etc.).

Cela est possible grâce à une capacité intégrée similaire à netcat, supprimant le besoin de nc sur l'hôte intermédiaire. En utilisant ssh -W hôte:port, un tunnel vers l'hôte et au port spécifié est configuré et connecté à stdin/stdout, puis scp est exécuté sur le tunnel.

Les %h et %p dans le ProxyCommand sont remplacés par l'hôte et le port cible à partir de la commande scp externe, pour vous éviter d'avoir à les répéter.

Pour encore plus de commodité, vous pouvez configurer le proxy dans votre configuration ssh:

Host target.machine
    ProxyCommand ssh pcreds@proxy.machine -W %h:%p

et ensuite vous pouvez simplement faire

scp tcreds@target.machine:file .

* depuis OpenSSH 5.4 - sorti en Mars 2010

1 votes

Vérifié que cela fonctionne bien, et ne laisse pas de processus NC obsolètes sur la machine proxy.

1 votes

Où puis-je spécifier le port du proxy ?

1 votes

@Marged, Je ne suis pas en mesure d'essayer ici pour le moment, mais je pense que vous devriez pouvoir inclure -p avant le -W dans l'une ou l'autre méthode pour spécifier le port du proxy

21voto

dubek Points 641

Si vous n'avez pas de problème à utiliser rsync au lieu de scp, vous pouvez utiliser la commande suivante :

rsync -v --rsh "ssh proxy.machine ssh" target.machine:/remote/file /local/dir/

(vous aurez besoin d'un accès sans mot de passe à la machine proxy)

20voto

g33kz0r Points 3047

Vous pouvez le faire en une seule commande, mais vous avez besoin de netcat (nc) installé sur la machine proxy :

ssh -o "ProxyCommand ssh poxyuser@proxy.machine nc -w 1 %h 22" targetuser@target.machine

0 votes

Belle tentative, mais où dois-je ajouter le nom d'utilisateur pour le proxy et pour la connexion ?

0 votes

Juste avant les noms de machine, avec un @. J'ai modifié ma réponse pour refléter cela.

8voto

weeheavy Points 561
$ ssh -f -N -L : user@proxy.machine
$ scp target-user@local.machine:/remote/file -P  .

D'accord, en fait deux commandes...

1 votes

Comment puis-je spécifier le port de mon proxy ? Dans mon cas 8080

0 votes

@Marged ajoutez -p à votre commande ssh

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