SSH用法进阶,端口转发/内网穿透/上网代理
端口转发
ssh 不止能用来登录或者执行远程命令,还是用做端口转发
ssh 的端口转发分为三种 本地转发,远程转发,动态转发
在使用端口转发时,通常会使用到 -N,-f 两个 flag
-N 表示不需要执行任何命令,用于端口转发
-f 表示在后台运行,不需要登录到远端主机上
本地转发
本地转发是指将发送到本地端口的请求发送到远端主机上(本地做反向代理),可以以127.0.0.1的身份访问远程主机的mysql服务等其它http服务
ssh -Nf -L <本地地址>:<本地端口>:<远程主机目标地址>:<远程主机目标端口> <user>@<remote-ip>
访问 <本地地址>:<本地端口>,数据会转发到 <remote-ip> 主机的<远程主机目标地址>:<远程主机目标端口>中<本地地址> 可以省略,默认为 127.0.0.1
场景:远端主机(10.10.10.100)中运行一个 http server,但是他只监听了 localhost:8080 地址,但是我想在本地访问这个地址,该怎么办
ssh -Nf -L 8000:127.0.0.1:8080 iceber@10.10.10.100
这时通过本地 127.0.0.1:8000 就可以访问到 10.10.10.100 机器中的本地服务了
有时 MySQL 会限制登录的 ip,这时就可以使用本地端口转发来访问了
远程转发
远程转发是指将发送到远端主机的请求转发到本地的目标端口(内网穿透)
ssh -Nf -R <远程主机地址>:<远程主机端口>:<本地目标地址>:<本地目标端口> <user>@<remote-ip>
在本地执行 ssh 远程转发命令,访问 <远程主机地址>:<远程主机端口>时,请求会转发到本地<本地目标地址>:<本地目标端口>
<远程主机地址>: 可以省略,默认为 127.0.0.1,可以设置为 0.0.0.0 在所有网卡上建立转发
转发远程主机的非 localhost ip 时,需要修改 /etc/ssh/sshd_config
# /etc/ssh/sshd_config GatewayPorts yes
场景:将局域网中的 ssh 通过远程主机暴露给外网
在局域网外,我们无法通过 ssh 连接到局域网中的主机,但是如果把局域网主机中将 ssh 端口和可以外网访问的远程主机端口建立远程转发,那么就可以通过远程主机访问局域网主机了
ssh -Nf R 10022:localhost:22 iceber@<remote-ip>
将远程主机的 localhost:10022 端口接收的请求转发到本地 localhost:22 中
这时在外网登录远程主机,然后 ssh -p 10022 @localhost 就可以登录到局域网中了
不建议局域网中 ssh 端口直接和远程主机的外部 ip 建立端口映射
动态转发
动态转发会在本地监听端口,所有发送到该端口的请求都转发到远程主机中,由远程主机来执行请求(上网代理)
ssh -Nf -D <本地地址>:<本地端口> <user>@<remote-ip>
可以用来做 SOCKS5 代理,如果远程主机可以访问外网,这样通过把浏览器的代理服务器设置为 socks5://127.0.0.1:10080 就可以让远程主机来执行请求,同样可以访问到外网了
$ ssh -Nf -D 10080 iceber@<remote-ip>
————————————————
版权声明:本文为CSDN博主「IceberGu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DAGU131/article/details/108129625/