autossh
公网端
sed -i 's/#GatewayPorts no/GatewayPorts yes/g' /etc/ssh/sshd_config service sshd restart
内网端-利用 AutoSSH 实现端口转发
yum install autossh -y -q
在内网主机 A 上,利用 AutoSSH 建立一条 SSH 隧道
autossh -M 4010 -NR 80:localhost:4000 username@Remote-Public-Server (-p PORT) ~/.ssh/id_rsa
参数解释:
“-M 4010”意思是使用内网主机 A 的 4010 端口监视 SSH 连接状态,连接出问题了会自动重连
“ -N”意思是不执行远程命令
“-R”意思是将远程主机(公网主机 B)的某个端口转发到本地指定机器的指定端口
can解释:
“80:localhost:4000”意思是将内网主机 A 的 4000 号端口转发至公网主机 B 的 80 号端口上
“[email protected]”意思是公网主机 B 的用户名和 IP
“-p xxxx”意思是公网主机 B 的 SSH 端口,如果是默认的 22 号端口,则可以不输入.
ssh几个常用参数说明
-f:SSH客户端在后台运行。
-C:压缩数据传输。
-N:仅做端口转发。
正向代理(-L):相当于iptable 的port forwarding.
反向代理(-R):相当于frp 或者ngrok.
socks5 代理(-D):相当于ss.
============================================================
简化使用ssh的config配置方法
$ cat ~/.ssh/config Host Public-Server HostName Remote-Public-Server-IP User USERNAME Port 22 IdentityFile ~/.ssh/id_rsa LocalForward 80 localhost:4000 ServerAliveInterval 30 ServerAliveCountMax 3
手动启动运行(ssh和autossh用法都一样)
autossh -M 4010 -NR Public-Server ssh -M 0 -f -T -N Public-Server
加入Systemd服务例子内容
#cat /lib/systemd/system/autossh.service [Unit] Description=autossh Wants=network-online.target After=network-online.target [Service] Type=simple User=autossh EnvironmentFile=/etc/default/autossh ExecStart= ExecStart=/usr/bin/autossh $SSH_OPTIONS Restart=always RestartSec=60 [Install] WantedBy=multi-user.target
$ cat /etc/default/autossh AUTOSSH_POLL=60 AUTOSSH_FIRST_POLL=30 AUTOSSH_GATETIME=0 AUTOSSH_PORT=22000 SSH_OPTIONS="-N -R 2222:localhost:22 example.com -i /home/autossh/.ssh/id_rsa"
systemctl daemon-reload systemctl enable autossh systemctl start autossh
直接ssh进行跳板连接转发
ssh -N -T -L Public-server-Port:<local server Host>:local-server-PORT USER@Remote-Public-Server
none