最近太忙了都没有写博客,但是这篇觉得还是可以记录一下,所以简单的记录一下。
起因
最近在帮老师做项目跑代码,有幸得以使用学院的服务器,虽然听说这台服务器算是比较老的了,所以使用上也比较随意(所以我也得使用)但是也比我之前从基地拿的垃圾主机好多了,48核256G内存,两张1080Ti。
虽然配置高了,但是限制也比较多,我没有密码(ssh密钥连接的)也没有sudo权限,而且最主要的是,连不了外网,所以这篇文章用来记录一些我使用上的问题。
ssh相关
ssh远程连接,相当常见的方式,但是跟我平常使用有一些不同。我平时都是懒得生成密钥的,都是密码登录。但是这边老师没有给我创建账号,让我给公钥加到服务器上,然后我使用老师的账号(当然我也不知道密码)大概操作如下,
在自己电脑上生成RSA密钥对:1
ssh-keygen -t rsa
之后会有3个东西要我们输入,第一个是保存位置,默认是在用户目录下的.ssh
生成私钥id_rsa
和公钥id_rsa.pub
。私钥不能外传,公钥的话可以外传。
然后找一个能够连上远程服务器的人,将你的公钥加到远程服务器的~/.ssh/authorized_keys
,这个方法很多,可以用记事本打开自己的id_rsa.pub
,然后复制内容,让人粘贴到远程服务器的~/.ssh/authorized_keys
里,每个一行,总之这个本质上就是个文本编辑。
系统代理
之后来解决一系列的联网问题,前提条件,远程服务器连不了外网,我们自己的电脑能够连接远程服务器,我们的电脑能够连接外网,我们要让远程服务器通过我们的电脑来访问外网。
注这篇文章讲的所有代理方法均为http代理,只代理http,并不能解决所有的网络问题,我使用这个方法只是因为我台式机只有一个网卡,不能搞共享网关,http代理也勉强够用。
首先我们自己的电脑需要能够当http代理服务器,这类软件大家可以自己找,我是刚好clash也可以本机开代理服务器,所以我直接用的clash开局域网访问。
然后连接远程服务器,在远程服务器上设置环境变量1
2export http_proxy=http://你的电脑ip:端口
export https_proxy=http://你的电脑ip:端口
设置完之后测试一下网络,懂一点的人肯定是ping baidu.com
测试,然后发现ping不通。正常现象,ping这个不走http协议,所以可以用curl或者wget试一下百度1
curl https://www.baidu.com
如果显示了一串html代码并且能够用人脑解析出百度的主页那就能连上外网了。
能够连上外网之后可以使用wget下载东西,就不需要在自己电脑上下了之后传到服务器上了。
上面的操作只有在当前会话有用,也就是说你exit之后重新连又要重新设置一次,所以可以把设置环境变量那两行写在一个sh脚本里面,每次需要代理的时候运行一下,更懒一点如果这个用户只有你自己使用,可以把这两行加到~/.profile
里,这样每次登录自动设置代理。
不需要使用代理的时候可以用下面两行命令清除代理的环境变量1
2unset http_proxy
unset https_proxy
conda设置代理
conda创建环境和装包都需要网络(如果没有缓存的话),系统环境变量会不会影响conda我不记得了,反正我使用conda的时候都是每次手动设置代理1
2conda --proxy http://你的电脑ip:端口 create -n 环境名 python=x.xx
conda --proxy http://你的电脑ip:端口 install 包名
同理,如果这个用户只有你自己使用的话可以设置永久代理1
2conda config --set proxy_servers.http http://你的电脑ip:端口
conda config --set proxy_servers.https http://你的电脑ip:端口
这种方法本质上也是修改配置文件,所以也能通过修改~/.condarc
来设置。
pip设置代理
pip安装包大概也和conda一样,每次手动代理1
pip --proxy http://你的电脑ip:端口 install 包名
永久设置1
pip config set global.proxy http://你的电脑ip:端口
这种方法本质上也是修改配置文件,所以也能通过修改~/.pip/pip.conf
来设置。
cuda相关
同样是配环境时的问题,服务器上只装了nvidia驱动(装了驱动就可以使用nvidia-smi查看驱动和最高支持的cuda版本,以及显卡信息)但是没装cudatoolkit,在我询问老师之后老师说cuda用python的。
网上搜到的是用conda装的,而且确实装了能用,如果没装cudatoolkit,同时又装了cuda版本的包(直接装whl的话能够装上)但是运行时会报错缺个什么动态链接库。
1 | conda install cudatoolkit=xx.x |
这样就算装好了,注意指定版本,而且最好不要等到运行报错之后再装,应该提前装好。
vscode历史版本下载
前情提要,我能用的这台学院服务器有点老了,主要是系统版本和glibc的版本低了,而且这种服务器肯定是只要能跑,还在跑就肯定不会更新的,所以肯定只能我们去适配它。
我们老师是说用vscode的remote ssh到服务器上写代码的,但是有一个小小的坑,vscode远程的时候需要在服务器上下载服务端,并且高版本的vscode客户端不一定兼容低版本的服务端,所以需要给vscode客户端降级。
据我目前知道的25年4月的版本高了,24年11月的版本还能用,vscode客户端的历史版本在这里下载,在左边可以选版本,在页面上边有各版本下载地址,下面有版本介绍。
远程连接之后会自动下载服务端,这里需要注意,如果服务器不能联网,那就要像前面说的系统代理那样,在~/.profile
里添加代理的环境变量,这样才能自动下载服务端。
或者也可以像网上说的自己手动下载并解压指定版本的服务端,但是这样会非常麻烦。
tmux挂后台
不得不说装这个的人真是跟我一样紧跟潮流(虽然也是很多年前的潮流了)本来我还以为服务器上会没有tmux,只能用screen,但是没想到居然有tmux。
正常ssh连接的时候跑的程序在ssh断开的时候就终止了,但是能用上服务器来跑的程序一般耗时都不短,而且我们肯定不可能让一个耗时多的程序一直占着我们的终端,所以不管是从哪个角度,我们都应该把长时间跑的程序丢到后台。使用也很简单,直接输tmux
就可以开一个后台窗口出来,然后正常运行程序,关闭后台窗口(不退出)按快捷键ctrl+d松开再按下b
,再打开的话用tmux a -t窗口号
,窗口号从0开始,在后台左下角可以看,如果不记得了也可以tmux ls
来查看,或者一一试。