Je suggérerais ce qui suit dans votre .ssh/config
:
Host C
User user
ProxyCommand ssh -W %h:%p [email protected]
Je ne suis pas beaucoup plus sûr si l'hôte B n'est pas fiable et fonctionne pour scp et sftp.
Comme décrit dans cette réponse, vous pouvez utiliser le ProxyCommand
directive pour avoir un ssh
l'hôte vous renvoie vers un troisième hôte de manière transparente :
Supposons que vous ayez les trois hôtes suivants :
workstation.example.com
- C'est la machine sur laquelle vous travaillez physiquementproxy.example.com
- Il s'agit de la machine par laquelle vous acheminez votre trafic SSHendpoint.example.com
- C'est là que vous voulez que le trafic aboutisse
En ~/.ssh/config
le workstation
, ajoutez ce qui suit :
Host endpoint
User endpointUser # set this to the username on the endpoint host
HostName endpoint.example.com
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
Sur le proxy
hôte, assurez-vous que nc
(netcat) est installé.
Puis, sur workstation
, vous pouvez ssh endpoint
ou sftp endpoint
et vous serez mandaté de manière transparente à la machine par le biais de votre hôte proxy. scp
fonctionnera également.
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 copiera les fichiers d'un remotePath sur server2 directement dans votre machine à localPath. En interne, la requête scp est proxy via server1.
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
Si vous utilisez plutôt l'authentification par mot de passe, essayez avec
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
Si vous utilisez les mêmes informations d'identification utilisateur sur les deux serveurs :
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>