Stroje ve vnitřní síti bývají dostupné jen přes bastion. Ruční ssh bastion a odtud ssh nas funguje, ale scp, rsync ani git tak použít nejdou.
Jednorázově z příkazové řádky
ssh -J bastion.example.org nas.internal
Trvale v konfiguraci
Do ~/.ssh/config:
Host bastion HostName bastion.example.org User admin Host nas HostName nas.internal User admin ProxyJump bastion
Od té chvíle funguje ssh nas, scp soubor nas:/tmp/, rsync -a ./data nas:/srv/ i git clone nas:/srv/git/repo.git bez dalšího zařizování.
Proč ne ProxyCommand s netcat
Starší návody vedou ProxyCommand ssh bastion nc %h %p. ProxyJump (OpenSSH 7.3 a novější) dělá totéž, ale nepotřebuje nc na bastionu a nechává šifrování mezi klientem a cílem celé na klientovi – bastion vidí jen tok bajtů.
Řetěz přes víc skoků
Skoků může být víc, oddělují se čárkou a procházejí zleva:
ProxyJump okraj,vnitrni-bastion
Na co si dát pozor. ProxyJump nedědí IdentityFile z cílového hostitele – klíč pro bastion patří k jeho vlastnímu Host bloku. A pokud se bastion ptá na heslo, zeptá se při každém spojení; ControlMaster auto s ControlPath ~/.ssh/cm-%C a ControlPersist 10m z toho udělá jedno – bez ControlPath se sdílené spojení nevytvoří.