SSH远程转发

为远程服务器配置的核心任务是将远程服务器的访问请求转到本机

ssh连接的同时建立转发:

ssh -R <remote-port>:<dest-ip>:<dest-port> <user>@<server-ip>

一个例子:

# dest-port在这里设置为7890是因为我本机的某c开头的软件监听的端口是7890
# SSR也是同理
ssh -R 12000:localhost:7890 root@123.123.123.123 #虚构的用户名和服务器ip

上面-R后面的部分是指把服务器(123.123.123.123)上的12000端口转发到本机(localhost)的7890端口,准确地说,任何到达服务器12000端口的请求都会被转给我本机的7890端口

7890是本机工具监听的端口,所以最后该工具拿到了请求,将它发往了正确的网站,至此完成了一次完整的请求

服务器端设置

服务器按照远程转发设置本地科研工具连接的前提是必须存在一个建立起上述远程转发的ssh连接
粗略地讲,就是得先执行一次

ssh -R 12000:localhost:7890 root@123.123.123.123 #虚构的用户名和服务器ip

只有这样建立一次连接,才能把对应端口转发到本机,而且在使用过程中这个连接不能断,否则端口转发也停止了,请求就发送不到本机

vscode连接服务器

为了方便操作,用vscode来登录服务器设置

先在vscode中下载remote-ssh插件
请添加图片描述

配置ssh信息

安装成功之后,点击左下角蓝色图标
请添加图片描述
上面的User、HostName请填写你自己的准确信息,ssh的Port一般是22(我这里做了其他转发),没动过关于ssh端口的话Port这一行直接不写就好了

这里就是通过配置ssh的config文件来实现远程转发,config文件位置一般是~/.ssh/config,windows下的位置%USERPROFILE%/.ssh/config,添加的RemoteForward与之前的-R对应

书写顺序仍然是RemoteForward <远程port> <接收请求的机器的ip>:<接收请求的机器的科研工具端口>

一个例子:

Host Server
    # HostName写服务器ip地址         或者主机名(要保证dns服务器能解析,或者直接在hosts里手动解析主机名,这样就不用来回输ip地址了)
    HostName address   
    # 你在服务器上的用户名
    User name
    # 你的私钥文件路径,没有就去掉这一行
    IdentityFile D:\....
    # 把服务器上的12000端口转发到本地的7890端口
    RemoteForward 12000 localhost:7890
检测远程服务器端口是否可用

还要保证设置转发的远程port没有被占用,建议转发前先在服务器上确认一次,被转发的服务器端口号不要取特殊端口,比如80,443这种,尽量取个大于10000的,还要保证小于65535
在服务器上输入下面内容来确定端口有没有占用:

# netstat -apu | grep port
# 比如
netstat -apu | grep 12000

如果只有下面的内容,可以用
在这里插入图片描述
如果还有额外信息,比如:

那么这个端口被占用了,请换一个,需要注意的是,在建立连接之前测试有没有占用,因为一旦你建立了远程转发的连接,端口就被占用了,所以在连接之前先做一次不包含远程转发的连接,测试一下哪些端口可以使用

或者在连接的时候也能看到端口是否被占用:下面就是被占用了
在这里插入图片描述
注意,如果有一次带转发的连接成功了,并且连接一直保持着没有断开,那么你后面再连接也会显示这个,所以一切以服务器是否成功连接为准,ping几个网站看看

服务器设置

然后只要与对应服务器建立一次包含远程转发的ssh连接(也就是要么手动输入ssh -R ...,要么给对应的服务器在~/.ssh/config里配置了RemoteForward),基本就完成了百分之九十的工作

我一般会用windows terminal建立一次带远程转发的连接,使用mobaxterm等工具连接也可以,然后保证带远程转发连接的窗口不要关闭,所以这里就建议配置config文件来实现远程转发,这样的话每次连接都是带远程转发的,只要有一个连接窗口开着就可以

接下来就是在服务器端配置,输入:

export http_proxy=localhost:12000
export https_proxy=localhost:12000

这里的12000-R/RemoteForward后面的第一个端口是一致的

测试一下是否成功:

curl -L google.com

在这里插入图片描述
这就OK了

ssh转发能做的事情还有很多,包括转发tensorboard服务啊、转发web服务等等

速通版

假设你是windows系统连接ubuntu服务器,实测下来mac连接ubuntu也是一样的

  1. 修改ssh配置文件
    对于windows而言,文件在%USERPROFILE%/.ssh/config
    在这里插入图片描述
    没有这个文件的话就进%USERPROFILE%/.ssh创建一个
    内容格式:

    
    Host Server
    	# HostName写服务器ip地址         或者主机名(要保证dns服务器能解析,或者直接在hosts里手动解析主机名,这样就不用来回输ip地址了)
    	HostName address   
    	# 你在服务器上的用户名
    	User name
    	# 你的私钥文件路径,没有就去掉这一行
    	IdentityFile D:\....
    	# 把服务器上的12000端口转发到本地的7890端口
    	# 7890 是你的科研工具监听的端口
    	RemoteForward 12000 localhost:7890
    
  2. 使用windows terminal/mobaxterm/vscode(remote-ssh插件)连接
    下面是cmd里执行:
    在这里插入图片描述
    登录成功:
    在这里插入图片描述

  3. 服务器设置

    export http_proxy=127.0.0.1:12000 #端口要和RemoteForward里设置的第一个端口一致
    export https_proxy=127.0.0.1:12000
    

    服务器关闭代理:

    unset http_proxy
    unset https_proxy
    

12.19 修改

之前一直混用localhost127.0.0.1,直到今天发现

export http_proxy=localhost:12000
export https_proxy=localhost:12000

在其他网站好像没什么问题,就是huggingface连不上
换成

export http_proxy=127.0.0.1:12000
export https_proxy=127.0.0.1:12000

就好了

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐