连接内网服务器教程


参考资料
csdn
大佬博客

目的

学校的服务器连接的是校园网,使用mtr工具可以找到下面几个地址。其中最后一个地址为成都教育网IP,教育网IP会拦截外面的访问(这部分理解不深,暂时这么认为)

20241223010104

一个比较方便的方法是,先找一个有公网IP的服务器,然后让学校的服务器连接该公网IP地址的服务器,建立一个SSH反向隧道,然后我的笔记本就可以在外网环境下,连接公网IP的服务器,再通过公网服务器连接学校的服务器。

过程

1.获得具有公网IP的云服务器

这里选择阿里云服务器,第一次买有优惠,不到100就可以获得1年。

ali云服务器

2.与云服务器建立无密码ssh连接

然后让学校的服务器建立与云服务器的无密码ssh连接

ssh-keygen -t rsa

然后将生成的公钥添加到云服务器中,并进行绑定。

20241223012702

然后进行登录

ssh root@xxx

如果出现错误Permission denied (publickey)
需要将公钥添加到本地 ssh 环境

ssh-add ~/.ssh/rsa #添加专有密钥添加到 ssh-agent

添加过程如果报错Could not open a connection to your authentication agent可以执行下面的方法

# linux
eval `ssh-agent`

如果windows系统下报错Error connecting to agent: No such file or directory

用命令行打开powershell

get-service ssh* #检查ssh-agent服务是否启动成功
#如果是stopped
Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent

3.建立SSH反向隧道

在内网端执行下面的命令,测试 autossh + 免密登录是否成功

apt-get install autossh
autossh -M 9991 -NfR 9888:localhost:22 xxx@xxx

在云服务器端执行watch -n 1 netstat -tnlp

没问题的话可以看到一个有9888的端口

然后配置内网端开机启动反向ssh,注意修改其中的一些参数。

# 创建autossh.service
vim /lib/systemd/system/autossh.service

# 将下面的内容加进去
[Unit]
Description=Auto SSH Tunnel
After=network-online.target
[Service]
User=xxx
Type=simple
ExecStart=/usr/bin/autossh -NR 9888:localhost:22 -i /home/xxx/.ssh/id_rsa xxx@xxx -p 22 >> /dev/null 2>&1
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
KillMode=process
Restart=no
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target

启动配置

systemctl enable autossh
systemctl start autossh

systemctl status autossh

4.SSH两级跳文件配置

由于阿里云服务器只能绑定一个SSH公钥,如果绑定了,就不允许其他用户从root登录

所以需要把阿里云服务器配置成通过密码登录,就可以多用户同时连接了。

用vscode远程开发通常通过配置ssh文件,用远程资源管理器来进行ssh连接。

在ssh config中编写下面的语句,意思是以cloud-server为中转,连接cloud-second。

Host cloud-server
    HostName xxx
    Port 22
    User xxx

Host cloud-second
    HostName xxxx
    Port 9888
    User xxx
    ProxyCommand ssh -W %h:%p cloud-server

运行ssh cloud-second即可远程控制内网设备了


文章作者: sdj
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 sdj !
  目录