外网连接内网电脑
程序员文章站
2022-06-03 21:45:07
...
需求:
实验室有一台服务器,但用的是校园网,想平时可用另一台电脑(Mac)远程连接服务器,跑跑数据啥的
原理:
校园网是内网,外网看不见内网IP,因此正常用SSH连接不了内网主机。但内网可与外网通信,因此我们可以先用内网主机SSH连接外网,然后在外网主机用反向SSH连接内网。
操作步骤:
由于我们自己的电脑未必有外网IP,因此我们需要一个固定的外网IP,可搞个云服务器啥的(阿里云,腾讯云等,学生价9元一个月)。
1.准备云服务器A,内网主机B,自己使用的电脑C(我的是Mac,自带终端可用SSH,window系统的可下载Putty连接)
2.在内网主机B执行:
ssh -NCfR 1111:localhost:22 [email protected] -p 22
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
username为服务器用户名,通常为root,IP为服务器公网IP,注意不是内网IP(如阿里云公网IP可在控制台上查)
3.上面的操作:公网A的1111端口被映射成内网主机B的22端口,现在在服务器B上执行命令:
ssh [email protected] -p 1111
即登陆本地的1111端口,相当于登陆内网服务器B的22端口,即连上了内网B了
4.由于这种反向SSH会因超时而被关闭,因此下面使用免密码登陆
登录内网服务器,创建私钥和公钥:
ssh-****** -t rsa -f ~/.ssh/id_rsa -P '' #-t 指定类型,-f指定文件生成路径,-P指定文件密码(''表示无密码)
将生成的公钥拷贝到外网服务器:
ssh-copy-id -i .ssh/id_rsa.pub [email protected] # 这里的username为外网服务器用户名,IP为外网服务器的IP
拷贝成功,测试连接,此时内网服务器可以免密登录外网服务器
ssh [email protected] # 这里的username为外网服务器用户名,IP为外网服务器的IP