使用模板服务实现多端口隧道的建立和进程守护

编写配置文件:多个配置文件可以放到相同的目录,方便模板读取

mkdir -p /etc/tunnel.d

本地转发示例:把对本地的访问请求转发到远程

vi /etc/tunnel.d/service1
SSH_PORT=22
# 提前配置好免密登录
SSH_HOST=my-ssh-host
SSH_USER=root
TUNNEL_TYPE=-L
# 以下配置表示把对ssh客户的127.0.0.1接口的20002端口的请求转发到my-ssh-host的443,其中127.0.0.1:443可以改成远程主机my-ssh-host可以访问到的其他主机和端口
TUNNEL_SPEC=127.0.0.1:20002:127.0.0.1:443
# 对应的autossh 命令是:
autossh -M 0 -N -p 22 -L 127.0.0.1:20002:127.0.0.1:443 root@my-ssh-host
# 对应的ssh命令是
ssh -N -p 22 -L 127.0.0.1:20002:127.0.0.1:443 root@my-ssh-host

远程转发示例:把对远程的访问请求转发到本地

vi /etc/tunnel.d/service2
SSH_PORT=22
# 提前配置好免密登录
SSH_HOST=my-ssh-host
SSH_USER=root
TUNNEL_TYPE=-R
# 以下配置表示把对远程主机my-ssh-host的10022端口的访问请求转发到ssh客户的可访问到的主机(192.168.1.100)的端口(22),其中192.168.1.100:22可以改成ssh客户端可以访问到的其他主机和端口
TUNNEL_SPEC=127.0.0.1:10022:192.168.1.100:22
# 对应的autossh 命令是:
autossh -M 0 -N -p 22 -R 127.0.0.1:10022:192.168.1.100:22 root@my-ssh-host
# 对应的ssh命令是
ssh -N -p 22 -R 127.0.0.1:10022:192.168.1.100:22 root@my-ssh-host

配置服务模板

# vi /etc/systemd/system/tunnel@.service
[Unit]
Description=SSH Tunnel for %i
After=network.target

[Service]
EnvironmentFile=/etc/tunnel.d/%i.conf
ExecStart=/usr/bin/autossh -M 0 -N -p ${SSH_PORT} ${TUNNEL_TYPE} ${TUNNEL_SPEC}  ${SSH_USER}@${SSH_HOST}
Restart=always

[Install]
WantedBy=multi-user.target

使用服务

# 启用服务(重启时自动启动)
systemctl enable tunnel@service1.service
systemctl start tunnel@service2.service

可以查看启动情况

ps aux|grep ssh

可以查看端口监听:

netstat -anp|grep 10022

发表评论