Appearance
背景
- 远程服务器对外服务的端口关闭如 redis 6379,mysql:3306 等,但是不想对外暴漏端口,ssh:22 可以登录远程服务器,想实现本地访问远程服务。
- 公网访问内部服务,端口转发
端口实现
bash
port_proxy () {
PORT=$1
SSH_TARGET=$2 # root@198.124.2.3
ssh -f -N -L ${PORT}:127.0.0.1:${PORT} ${SSH_TARGET}
}
port_close () {
PORT=$1
lsof -i:${PORT} | awk '{print $2}' | grep -v PID | uniq | xargs kill -9
}
ssh 参数解释
- -f 后端运行,如果想在终端一直阻塞,可以不要这个参数
- -N 端口转发,不会执行远程命令。Do not execute a remote command. This is useful for just forwarding ports.
- -L 端口转发参数
- -L [bind_address:]port:host:hostport
- -L [bind_address:]port:remote_socket
- -L local_socket:host:hostport
- -L local_socket:remote_socket
示例
bash
. ~/.bashrc
# 建立端口转发
port_proxy 6369 ydl@ydl
# 断开连接
port_close 6369
内网穿透实现
bash
port_gateway() {
LOCAL_PORT=$1
TARGET_PORT=$2
SSH_TARGET=$3
ssh -NR 127.0.0.1:${TARGET_PORT}:127.0.0.1:${LOCAL_PORT} ${SSH_TARGET}
}
sshd_config 修改
bash
vim /etc/ssh/sshd_config
# 修改如下:(将远程端口转发绑定到非loopback地址,允许远程主机连接)
# GatewayPorts yes
# 重启ssh服务
service sshd restart
示例
bash
. ~/.bashrc
# 内网穿透
port_gateway 80 8080 ydl@ydl
# 外网访问内部服务
curl -I http://ydl:8080