Je souhaite copier un fichier de ma machine A sur le serveur C, mais je n'ai accès au serveur C que par le biais du serveur B.
Au lieu de transférer d'abord sur le serveur B, connectez-vous puis transférez-le sur le serveur C, est-il possible de transférer le fichier directement avec SCP ou des programmes similaires?
(Emacs tramp-mode a cette fonctionnalité pour éditer des fichiers à distance).
En supposant OpenSSH, ajoutez-le à votre configuration SSH dans .ssh / config
Cela permettra à SSH de se connecter "directement" à la machine nommée distante en effectuant un proxy via la machine nommée proche. Il peut ensuite utiliser des applications telles que scp et sftp sur la machine distante.
Pour que cela fonctionne, vous devez disposer de 'nc', autrement dit netcat, sur la machine nommée à proximité. Mais beaucoup de systèmes modernes l'auront déjà.
La solution tar de towo est plus efficace pour les problèmes ponctuels, à condition que vous ayez mémorisé la syntaxe et les règles de fonctionnement de tar.
la source
near
est différent de celui indiquédistant
, l'utilisateur proche s'en vaProxyCommand ssh nearuser@near...
et l'utilisateur distant se connecte sur uneUser distantuser
ligne distincte .Avec les versions plus récentes de ssh sur le serveur près de la machine (B), les opérations suivantes fonctionneront sans netcat:
Toutefois, AllowTcpForwarding doit être défini sur yes (valeur par défaut) sur la machine proche (B).
edit: nécessite OpenSSH 5.4+ sur B
la source
Vous pouvez ssh sur le serveur B en utilisant quelque chose comme
Ensuite, vous pouvez ssh au serveur C en utilisant
De même scp fonctionnerait en utilisant
N'oubliez pas d'utiliser le cas correct de p avec scp et ssh
la source
C'est possible et relativement facile, même lorsque vous devez utiliser des certificats pour l'authentification (typique dans les environnements AWS).
La commande ci - dessous copie des fichiers d'un
remotePath
surserver2
directement dans votre machine àlocalPath
. En interne, la requête scp est proxy viaserver1
.L’inverse fonctionne également (fichier à télécharger):
Si vous utilisez plutôt l’authentification par mot de passe, essayez avec
Si vous utilisez les mêmes informations d'identification d'utilisateur sur les deux serveurs:
la source
Si vous voulez être vraiment méchant, vous pouvez enchaîner ssh et tar, par exemple
tar c mydir | ssh server "ssh otherserver | tar x"
, mais cela peut se heurter à toutes sortes de problèmes.Le moyen le plus simple serait simplement de configurer un tunnel SSH avec les méthodes intégrées de SSH; Regardez le
-D
commutateur dans la page de manuel et transférez simplement un port sur le port ssh de l'autre serveur.la source
Vous pouvez également le faire à l’inverse et peut-être plus facilement.
Supposons qu'une session ssh soit ouverte avec la machine à laquelle vous voulez envoyer le fichier. Ce PC le plus éloigné, nous l'appellerons hop2. Votre hôte "proxy" sera hop1. Le PC qui est l’origine du fichier, nous appellerons cette origine.
Vous pouvez créer des tunnels rendant un port local disponible sur un PC distant. Nous définissons ainsi un port à ouvrir sur le PC distant, qui sera une redirection vers le port que vous avez intercepté lors de la construction du tunnel.
Sur hop2:
Maintenant, dans cette session de tunnel ouverte, vous pouvez faire la même chose de hop1 à file_origin.
Sur hop1:
Vous êtes maintenant tunnelé de hop2 à hop1 et à l’origine. Par coïncidence, les ports 5555 et 6666 sont maintenant ouverts sur leur origine, ce qui redirige vers le port 22 de hop2. Dans cette session, les deux suivants sont des itinéraires scp valides vers hop2:
Sur l'origine:
De cette façon, vous pouvez avoir un nombre arbitraire de sauts entre les deux et il est plus facile de travailler avec une chaîne de plus de deux sauts.
la source
Essayez d’adapter l’exemple suivant openssh config pour une configuration pouvant être utilisée par plusieurs hôtes:
Cela suppose un ensemble de serveurs commençant par "uat-" qui ne sont accessibles que via le serveur de passerelle / passerelle "bastion-uat". Vous voudrez probablement aussi ajouter
ForwardAgent yes
si vous utilisez une clé pour vous connecter.la source
ForwardAgent yes
pour cela. Le transfert d'agent n'est pas nécessaire dans ce cas car aucun client ssh ne s'exécutera sur le bastion et le transfert d'un agent lorsqu'il n'en a pas besoin va simplement réduire la sécurité. Et je pense qu'ilssh
manque à votre commande. Sissh
vous n'avez pas besoin d' une version récentenc
, vous pouvez taper à lassh -W %h:%p bastion-uat
place.Ce n'est pas scp (ce que l'OP a demandé), mais je l'ai trouvé super simple à utiliser
rsync
pour copier d'un local à un autre sur un seul saut avec:Source: http://mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
J'avais essayé la suggestion -o ProxyPass ci-dessus et je ne voulais pas changer de configuration pour mes besoins changeants. Comme l'indique l'auteur du lien ci-dessus, le fichier de destination précédant le signe deux-points (:) est important pour indiquer que le chemin spécifié est sur le serveur de destination. De plus, en utilisant rsync, vous avez les options de comparaison de date, de synchronisation de dossier, etc. J'espère que cela aidera quelqu'un!
la source
scp -o 'ProxyJump jumpboxname' un nom de fichier.txt finaldestinationhost: / tmp /.
la source