Je sais que c'est une réponse tardive, mais je viens de découvrir une façon géniale de le faire. C'est fondamentalement la réponse de Holger Just, mais dans un fichier de configuration enregistré:
Vous devez mettre cela dans votre ~/.ssh/config
fichier sur local.machine, (créer le fichier s'il n'existe pas)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
Après avoir sauvegardé 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. Tout comme Nautilus, si vous utilisez GNOME et souhaitez utiliser une interface graphique.
utilisateur24925
la source
Host proxy.machine
lignes dans le même~/.ssh/config
fichier, 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 à. ..target) et 3) ce quenc %h %p
signifieVous pouvez le faire en une seule commande, mais vous devez installer netcat (nc) sur la machine proxy:
[EDIT: mélangé l'ordre des machines ...]
la source
Vous pouvez maintenant * faire cela comme une ligne, sans avoir besoin de
nc
n'importe où:Explication
pcreds
ettcreds
représenter vos informations d' identification de proxy et cible si nécessaire (username
,username:password
, etc.).Cela est possible grâce à une capacité intégrée de type netcat, qui supprime l'exigence de
nc
sur l'hôte intermédiaire. L'utilisation dessh -W host:port
configure un tunnel vers l'hôte et le port spécifiés et le connecte à stdin / stdout, puisscp
s'exécute sur le tunnel.Le
%h
et%p
enProxyCommand
sont remplacés par l'hôte et le port cible que vous spécifiez.Pour encore plus de commodité, vous pouvez configurer le proxy dans votre configuration ssh:
et à partir de là juste faire
* depuis OpenSSH 5.4 - sorti en mars 2010
la source
-p <portnum>
avant la-W
dans l'une ou l'autre méthode pour spécifier le port proxySi cela ne vous dérange pas d'utiliser rsync au lieu de scp, vous pouvez utiliser l'un des doublons suivants:
(vous aurez besoin d'un accès sans mot de passe à la machine proxy)
la source
OK, en fait deux commandes ...
la source
8080
-p <portnumber>
à votre commande sshUn one-liner? Pas par hasard. Vous devez d'abord établir un proxy et vous ne pouvez pas le faire avec scp seul.
En le faisant manuellement, j'ouvre une session d'écran pour mon tunnel:
screen -S tunnel
Screen est utilisé pour maintenir le tunnel dans un shell d'arrière-plan. Utilisez n'importe quelle technique pour garder le tunnel ouvert en arrière-plan (la réponse de @ weeheavy est probablement la plus simple). Une fois dans la session d'écran, je commence mon tunnel comme si
ssh -L 2222:target.machine:22 [user@]proxy.machine
Pour décomposer cela, cela dit en gros "Sur ma machine locale, ouvrez le port 2222 et toute connexion touchant localhost: 2222 est mandatée par proxy.machine vers target.machine: 22"
Une fois que vous avez établi la connexion ssh et le tunnel, déconnectez-vous de la session écran avec "Ca d". Pour revenir à cette session d'écran, tapez
screen -raAd tunnel
Une fois que vous êtes de retour dans votre shell d'origine, votre commande scp ressemblera à
scp -P 2222 localhost:your/file/on/target.machine local/path
N'oubliez pas que le port local 2222 n'est en réalité qu'un tunnel allant à target.machine.
la source
Apparaît que scp supporte l'option "-o" comme ssh, bien que je ne sois pas sûr de lui transmettre un nom d'utilisateur / mot de passe proxy:
Si vous obtenez,
nc: invalid option -- X
consultez https://stackoverflow.com/a/23616021/32453la source
Que diriez-vous:
la source
Vous pouvez essayer quelque chose comme:
Mais cela ne fonctionnera pas si votre proxy.machine doit vous demander votre mot de passe (SSH n'est pas dans un TTY, donc askpass échouera).
Si vous avez plus d'un fichier, vous pouvez utiliser tar comme ceci (non testé, j'utilise habituellement un netcat de cette façon):
la source
Une autre solution simple pour transférer un source_file du source_host à un destination_host via un proxy_host :
Connectez-vous sur le serveur proxy :
A partir du serveur proxy, transférer le source_file du source_host au destination_host (vous pouvez taper cela comme une ligne, en omettant le
\
, ou deux lignes, comme indiqué ci - dessous):Cela nécessite que la connexion sur l'hôte source à l'hôte proxy utilise une clé rsa.
la source
Si vous devez utiliser des clés publiques, vous aurez besoin de quelque chose comme ceci.
la source
J'ai suivi cet article et trouvé une réponse qui fonctionne pour moi. (Parce que les réponses ci-dessus ne fonctionnent pas pour moi).
Comment créer
scp
un fichier via un hôte intermédiaire (ou hôte de saut) http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.htmlEt ma réponse est comme ci-dessous:
Exemple:
J'espère que cette réponse pourrait vous aider.
la source