基于frp通过ssh访问公司(学校)内网机器【Ubuntu系统】

【UpdateTime:20170717】

一、本文目的

本人最近想尝试使用ssh远程链接家里的电脑。事情是这样的:本人最近想学习和专研【深度学习】,但是实验室的电脑显卡性能不够用,都是2GB的显存(GTX 960M)。跑一个MNIST代码就因为显存不够而报错,当然可以通过设置batch_size的大小解决这一问题。但是后面肯定会遇到更大的数据集(cifar100,ImageNet等等),需要更大的显存。另一方面就是显卡性能也不够,别的实验室都有几块GTX 1080Ti的集群显卡,或者是TITAN Xp等,他们跑代码的速度,那叫一个快。基于此,本人是想在家里买一台配有 TITAN Xp 显卡的机器,然后通过ssh远程操作跑实验(虽然还有 TeamViewer 这么好用的工具存在,但是ssh会比 TeamViewer 更稳定些,或者说2种方式都存在的话更保险一些)。要通过ssh链接不属于同一个内网的机器,需要一个外网IP来解决这个问题。同学介绍了一个工具,frp,可以解决这问题,下文将介绍基于frp通过ssh链接内网机器。


参考网址:

1. frp 使用文档:https://github.com/fatedier/frp/blob/master/doc/quick_start_zh.md

2. github - frp:https://github.com/fatedier/frp/blob/master/README.md(有中文版)



二、相关说明&&介绍

1. frp frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。frp的作用如下:

1)利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。

2)对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。

3)利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。


2. 配置文件:frps.ini 和 frpc.ini

1)将 frps 及 frps.ini 放到具有公网 IP 的机器上( 本人此处使用阿里云服务器提供的公网)

2)将 frpc 及 frpc.ini 放到处于内网环境的机器上(本人此处的机器就是放在家里且性能好的机器)


3. 图示说明:

如下图所示,本文的目的就是实现“用户实际操作的PC”通过 ssh 去控制“服务器A”。其中,服务器B提供了外网IP,不可缺少。本文的前期准备包括:1)准备1台有外网的服务器B,本文选择阿里云服务器。2)一台你想要控制的服务器或者PC,本文是想要控制家里的一台性能较好的PC机。3)一台你实际操作的PC,如宿舍的笔记本电脑或者实验室普通的PC等。4)针对服务器A和服务器B,我们需要安装和配置go语言环境和frp环境。5)针对用户实际操作的PC,我们只需要安装ssh环境即可,如windows系统可以安装SecureCRT或者Putty;Ubuntu系统可以安装使用ssh或者安装putty。(注,下图最左侧框图中配置文件应该是:frpc.ini)




三、实现步骤:通过 ssh 访问内网机器

1.安装&&配置go语言开发环境

参考网址:

== https://www.runoob.com/go/go-environment.html

== http://blog.csdn.net/tigerisland45/article/details/53447199

1)根据系统类型下载go语言安装包https://www.golangtc.com/download

2)解压( 此处的路径为/usr/local tar -xvxf go1.9beta2.linux-amd64.tar.gz

3)建立Go工作空间:

== 在/home目录下, 建立一个名为gopath(名字任意)的目录,在该目录中建立三个子目录(名字必须为src、pkg和bin),其实只要创建src目录就可以了。

src   -- 里面每一个子目录,就是一个包。包内是Go的源码文件 

pkg  -- 编译后生成的,包的目标文件 

bin   -- 生成的可执行文件。

4)配置环境:

- 输入:gedit ~/.bashrc 或者 vim  ~/.bashrc

- 在文件尾部添加以下命令: 

# Go environment 

export PATH=$PATH:/usr/local/go/bin 

export GOPATH=/home/gopath

5)生效配置文件:source ~/.bashrc

6)测试go语言环境是否配置完成,输入:go version


2. 下载frp源码并安装

1)下载源码 - 在 gopath 目录下执行命令:go get github.com/fatedier/frp

(确保go语言已经安装和配置成功)执行命令后代码将会拷贝到 $GOPATH/src/github.com/fatedier/frp 目录下。

2)编译:进入下载后的源码根目录,执行【make】命令,等待编译完成。编译完成后, bin 目录下是编译好的可执行文件,conf 目录下是示例配置文件。

3)部署:

== 将 ./bin/frps 和 ./conf/frps.ini 拷贝至服务器B任意目录。 

== 将 ./bin/frpc 和 ./conf/frpc.ini 拷贝至服务器A任意目录。 

== 根据要实现的功能修改两边的配置文件,详细内容见后续章节说明。 

- frps.ini

[common]
bind_addr = 0.0.0.0
# 用于接收 frpc 连接的端口
bind_port = 7000
log_file = ./frps.log
log_level = info

# ssh 为代理的自定义名称,可以有多个,不能重复,和frpc中名称对应
[ssh]
auth_token = 123 
bind_addr = 0.0.0.0
# 最后将通过此端口访问后端服务
listen_port = 6000

- frpc.ini

[common]
server_addr = XXX.XX.XX.XX
server_port = 7000
log_file = ./frpc.log
log_level = info
auth_token = 123

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
use_encryption = true


== 在服务器B执行 nohup ./frps & 或者 nohup ./frps -c ./frps.ini & 。

== 在服务器A执行 nohup ./frpc & 或者 nohup ./frpc -c ./frpc.ini & 。 

== 通过 ssh -oPort=6000 {user}@x.x.x.x测试是否能够成功连接服务器A({user}替换为服务器A上存在的真实用户)



四、总结

1. (服务器A + 服务器B)安装并配置go语言的环境

2. 服务器A + 服务器B下载并安装frp

3. 服务器A,被控制的PC)根据实际情况修改配置文件并运行:frpc.ini(nohup ./frpc -c ./frpc.ini &

4. 服务器B,具有外网)根据实际情况修改配置文件并运行:frps.ini(nohup ./frps -c ./frps.ini & 

5. (用户实际操作的PC通过ssh链接服务器A,只需要执行语句【 ssh -oPort=6000 {user}@x.x.x.x 】即可。


注:当用户实际操作的PC是ubuntu系统时,使用上述命令即可。但是当PC是windows系统时,我们正常使用的是可视化的软件(如,putty或者SecureCRT等),此时,我们只需要根据配置信息改变端口即可。如下图所示,以putty为例:

(此时,Port端口为6000,IP address为公网IP地址

如果想设置开机就执行命令开启服务,可执行【sudo gedit /etc/rc.local】命令,写入正确的命令语句。

例如,针对本人的相关命令为:lab406@lab406-yang:/etc$ ../home/gopath/frpc -c ../home/gopath/frpc.ini


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值