SSH JUMP

SSH JUMP

前輩的介紹之下做了一下ssh jump 的測試,其實這工具真的非常好用且方便。

測試環境:
proxyNode // DMZ 外,限定來源IP
targetNode // DMZ 內,受保護服務

之前我要從 client ssh 到 targetNode 需要
ssh 到 proxyNode ; 再從 proxyNode ssh 到 targetNode
且可能會把 ssh private key 放到 proxyNode! // 危險!

用了 proxy jump 之後,基本用法就是

ssh -J proxyNode targetNode

且不需要把 private key 放到 proxyNode // 安全!

jump 也可以一直跳下去

ssh -J jumpuser1@jump1,jumpuser2@jump2,...,jumpuserN@jumpN user@host

透過ssh jump 可以直接連到 DMZ 但是有時候需要檔案I/O,例如 scp, rsync, sshfs

# sshfs
sshfs -o ssh_command="ssh -J B_host" C_host:/<path> <mountpoint> 

# or rsync
rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

# or scp
scp -J username@B username@C:/some/path /some/path

最後建議用 .ssh/config , 設定如下:

Host targetNode
    HostName targetNode.example.org
    IdentityFile ~/.ssh/targetNode.pem
    User user1
    ProxyJump proxyNode

Host proxyNode
    HostName proxyNode.example.org	
    IdentityFile ~/.ssh/id_rsa
    Port 22
    User user2

因為都用 key 登入,所以直接下 ssh targetNode 會自動 jump 。

另外 sshfs, scp, rsync 在有設定 config 的情況下使用,可以少很多參數。

例如

sshfs targetNode:/etc /etc

以上,我開始重新設定所有的 ssh 都儘量改用 jump!

reference:
https://serverfault.com/questions/941934/sshfs-over-a-jumphost
https://blog.wu-boy.com/2016/10/ssh-agent-forwarding-proxycommand-tutorial/
https://www.tecmint.com/access-linux-server-using-a-jump-host/
https://nyogjtrc.github.io/posts/2020/03/ssh-proxyjump/
https://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.html