Suggerirei quanto segue nel tuo .ssh/config
:
Host C
User user
ProxyCommand ssh -W %h:%p [email protected]
Non sono molto più sicuro se l'host B non è attendibile e funziona per scp e sftp.
Come descritto in questa risposta, puoi utilizzare ProxyCommand
direttiva per avere un ssh
host ti rimanda a un terzo host in modo trasparente:
Supponiamo che tu abbia i seguenti tre host:
workstation.example.com
- Questa è la macchina su cui stai lavorando fisicamenteproxy.example.com
- Questa è la macchina attraverso la quale stai instradando il tuo traffico SSHendpoint.example.com
- Qui è dove vuoi che finisca il traffico
In ~/.ssh/config
su workstation
, aggiungi quanto segue:
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
Su proxy
host, assicurati che nc
(netcat) è installato.
Quindi, su workstation
, puoi ssh endpoint
o sftp endpoint
e verrai indirizzato in modo trasparente alla macchina tramite il tuo host proxy. scp
funzionerà anche.
È possibile e relativamente semplice, anche quando è necessario utilizzare i certificati per l'autenticazione (tipico negli ambienti AWS).
Il comando seguente copierà i file da un remotePath su server2 direttamente nella tua macchina su localPath. Internamente la richiesta scp viene inoltrata tramite server1.
scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
Se invece usi l'autenticazione tramite password, prova con
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>
Se utilizzi le stesse credenziali utente in entrambi i server:
scp -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]:/<remotePath> <localpath>