使用ssh反向代理+shadowsocks实现内网穿透
在外网访问学校服务器以及其他资源,例如下载论文等,均可以通过此方法实现。要求有一台具有公网ip的服务器。下文命令行中用到的地址定义如下:
公网服务器ip地址:server_ip
内网机器ip地址:local_ip
1、在本地机器上安装autossh:
1 | sudo apt install autossh |
2、云服务器安装openssh-server:
1 | sudo apt install openssh-server |
3、更改本地服务器的配置文件:
1 | sudo vim /etc/ssh/sshd_config |
设置PermitRootLogin为without-password,并在末尾添加:GatewayPorts yes
4、更改云服务器的配置文件:
1 | sudo vim /etc/ssh/sshd_config |
在末尾添加:GatewayPorts yes
5、重启本地以及云服务器的ssh服务:
1 | service ssh restart #本地 |
6、制作免密码登录,输入命令后一直确认即可
1 | ssh-keygen |
7、将本地生产的公匙放到远程服务器上:
1 | ssh-copy-id server_user@server_ip |
确认后要输入云服务器的登录密码
8、开启反向代理:
1 | autossh -M 30000 -o "StrictHostKeyChecking=false" -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" -NR 8980:local_ip:22 server_user@server_ip |
命令行中8980是将服务器端的8980端口映射到本地的22端口,即为默认的ssh端口。若只需要ssh访问,至此就完成了。若是需要用shadowsocks代理,需要将上一步中的22端口号修改,本文修改为4396。
9、在本地机器安装shadowsocks
1 | pip install shadowsocks |
10、启动shadowsocks
1 | ssserver -s local_ip -p 4396 -k password --fast-open |
上面命令中的local_ip为本地机器的ip地址,不能直接写localhost,4396对应上面映射的地址,password为设置的密码。
11、shadowsocks客户端连接地址
ip为云服务器的ip,端口为8980,加密方式默认为aes-256-cfb,可以ssh与shadowsocks二者共存,将对应的命令设置开机自启即可。