Suggerirei quanto segue nel tuo .ssh/config :
Host C
User user
ProxyCommand ssh -W %h:%p example@unixlinux.online
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 example@unixlinux.online 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 example@unixlinux.online" example@unixlinux.online:/<remotePath> <localpath>
Se invece usi l'autenticazione tramite password, prova con
scp -o ProxyCommand="ssh -W %h:%p example@unixlinux.online" example@unixlinux.online:/<remotePath> <localpath>
Se utilizzi le stesse credenziali utente in entrambi i server:
scp -o ProxyCommand="ssh -W %h:%p example@unixlinux.online" example@unixlinux.online:/<remotePath> <localpath>