开机自动实现ssh远程连接(内网穿透)

专栏总目录

举例实现不同ssh连接功能目录

一、准备测试程序

(一)用python写一个TCP服务器端程序

import socket
 
import threading
 
 
 
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 
s.bind(('127.0.0.1', 9999))
 
s.listen(1000)
 
print('start listening')
 
 
 
def handler(conn):
 
	data = conn.recv(1024)
 
	print(data.decode())
 
	
 
 
 
while True:
 
	conn, addr = s.accept()
 
	if conn:
 
		p = threading.thread(target= handler, args=(conn,))
 
		p.start()

(二)设置该程序自动运行

        按照ubuntu22 设置开机自动运行程序_ubuntu22开机自动运行命令-CSDN博客

操作,实现该程序 开机自动运行。

二、实现内网穿透

(一)拥有一个具有公网ip的云服务器

        此处省略,回头更新。

(二)流量转发

        在本地计算机,使用ssh远程转发,实现将本地服务,映射到云端服务器指定端口,实现内网穿透功能,即我们可以通过云端服务器的公网ip,将流量转发到内网服务器的端口。

该命令使用格式如下:

ssh -R 指定的公网IP服务器端口:本地地址:本地服务端口 用户名@公网ip服务器地址 -p 公网ip服务器ssh端口

例如:

公网服务器:  我的云服务器,即拥有公网IP地址的服务器地址为8.8.8.8;

                        ssh默认端口为22(未自己设置其他端)未设置公钥,仅使用密码登陆;

                        用户名为zero

内网服务器:应用程序开启在9999上侦听

实现目标:将【内网服务器】9999端口的服务,转发到【公网服务器】8899端口。实现【公网服务器】8899到【内网服务器】9999端口的联通。

        可以写成如下形式:

ssh -R 8899:127.0.0.1:9999 zero@8.8.8.8 -p 22

        上述命令的127.0.0.1:9999部分,也可以指定为当前内网的其它主机端口的服务,将指定内网主机端口上的服务内网穿透到云服务器指定端口上

        执行后,按照提示输入密码即可。

        在公网IP服务器段,使用netstat -pantu命令检查8899是否开启,检查内网服务器使用netstat -pantu命令检查是否已经成功开启了向8.8.8.8服务器的ssh隧道。

(三)开机自动实现建立上述隧道

1.安装工具

        为了实现ssh登陆的交互,需要使用expect工具

        安装该工具命令:

sudo apt-get install expect

2.编写expect脚本

        创建一个名为auto_ssh_tunnel_expect.sh的脚本,并添加以下格式:

#!/usr/bin/expect -f

set timeout 60

# SSH 登录信息
set username "zero"
set password "your_password"
set host "8.8.8.8"
set port "22"
set local_port "9999"
set remote_port "8899"

# SSH -R 命令
spawn ssh -R $remote_port:127.0.0.1:$local_port $username@$host -p $port

# 期待密码提示并输入密码
expect {
    "*assword:" {
        send "$password\r"
    }
}

# 保持SSH隧道开启
interact

3.设置脚本可执行权限

        在当前文件目录下,执行。

chmod +x auto_ssh_tunnel_expect.sh

4.测试脚本

./auto_ssh_tunnel_expect.sh

        如果一切正常,你的SSH隧道应该已经建立。

5.使用systemd服务设置开机自启

(1)创建一个新的systemd服务文件:
sudo vi /etc/systemd/system/ssh-tunnel.service
(2)在systemd文件中添加以下内容:

        请确保替换/path/to/auto_ssh_tunnel_expect.sh为你的脚本实际路径

[Unit]
Description=SSH Reverse Tunnel Service
After=network.target

[Service]
User=your_username
ExecStart=/path/to/auto_ssh_tunnel_expect.sh
Restart=always

[Install]
WantedBy=multi-user.target
(3)开启并启动服务
sudo systemctl enable ssh-tunnel.service
sudo systemctl start ssh-tunnel.service
(4)检查服务状态以确保它正在运行:
sudo systemctl status ssh-tunnel.service
(5)重启机器,检查该功能的实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静候光阴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值