简单记录一下设置shadowsocks的过程。

这里使用shadowsocks的主要原因是去年(2019年)本人所在学校的内部网络封禁了ssh, 而且应该不只是封的22端口,因为就算改端口也一样无法登录。 虽然我个人也不用超算之类需要ssh登录, 但是github上pull push的git方式同样是用的ssh,而且也同样无法使用。 若改为https的方式,则需要每次输入密码,十分不方便。

最后综合考虑了一下,只有使用代理封装ssh请求了。 目前各种教程比较多可能是shadowsocks了,所以最后选择了这个。 具体的设置主要有以下几个步骤:

  1. 购买具有公网IP的云计算机(或者VPS)
  2. 设置shadowsocks服务器端
  3. 下载本地客户端并设置服务器信息
  4. 设置本地ssh转发

vultr VPS购买

直接打开 vultr.com, 注册帐号,并购买相应配置的就行。 如果只是用来做一个shadowsocks服务器,只需要最低配置的就行。 目前最低是每月$3.5的10 GB SSD,1 CPU,512 MB,500 GB带宽的。 需要选择特定地理位置才会有这个配置,比如New York (NJ) United States。

大致就是25元每月,一年300左右,基本就是市面上稍微靠谱点的vpn包年价格, 自己设置的话,会麻烦点,不过这个VPS也可以做一些其他用途。 另外就是vultr的按小时计费,并不是关机就行,还需要删除实例,所以正常一直开着使用就行。

如果觉得本文有一些用途,可以通过以下邀请连接注册 https://www.vultr.com/?ref=7149038, 已注册用户可以通过以下连接付款https://www.vultr.com/?ref=8064479-4F

设置shadowsocks服务端

shadowsocks服务端的设置教程是比较多的, 这里主要说明一下我个人的配置过程。

首先是不同版本的shadowsocks, 有一个很老的 github wiki 列了一些异同, 不过这个页面已经很久没有更新了,信息很不准确。 最新的信息需要在 https://github.com/shadowsocks 找对应的库并浏览相应的介绍。

目前服务器端大致有这么几个版本

  1. shadowsocks,python版本,安装简单,不过挺久没更新了,也没有issue页面;
  2. shadowsocks-libev,c版本,占用资源少,开发较为活跃;
  3. shadowsocks-rust,rust版本,编译需要资源挺多的,至少vultr低配VPS没成功;
  4. go-shadowsocks2,服务端客户端可以统一用go命令,没看到怎么用配置文件启动,所以没试过。

以下分别记录一下前三种的尝试安装过程。 具体设置时,服务器端只需要安装成功一种就行。

pip 安装 python版 shadowsocks

主要过程包括安装python,安装shadowsocks,设置配置文件,设置自动启动。

安装python,这里可以直接miniconda。

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

source .bashrc

安装shadowsocks,pip上面的版本很久没更新了,需要直接git github上的(虽然这个也很久没更新了)。

pip  install git+https://github.com/shadowsocks/shadowsocks.git@master

之后是配置文件,已经有很多介绍, 这里只给个最简单的:

{
        "server": "填入vps ip",
        "port_password":{
                "端口": "尽量复杂的密码",
                "另一个端口": "另一个尽量复杂的密码"
        },
        "timeout": 300,
        "method": "aes-256-cfb"
}

填入相应的ip和端口以及密码,并保存在指定的位置,比如/etc/shadowsocks/ss.json 之后可以测试一下: ssserver -c /etc/shadowsocks/ss.json

其他的比如设置重启后自动运行,可以通过crontab实现。

crontab -e
@reboot /user/miniconda3/bin/python /user/miniconda3/bin/ssserver -c/etc/shadowsocks/ss.json -d start

snap安装c版本shadowsocks-libev

最简单的方式就是snap安装,不过需要先安装core, 即:

sudo snap install core
sudo snap install shadowsocks-libev

具体使用的时候,配置文件路径不能是一些系统路径, 最好直接在 /snap/shadowsocks-libev/ 文件夹下。 不然会报 ERROR: Invalid config path. 另一个问题是 shadowsocks-libev.ss-server 的配置文件不支持 port_password。 要么通过 shadowsocks-libev.ss-manager 或者每个端口分别建立 json 文件, 并分别运行shadowsocks-libev.ss-server

cargo安装rust版本shadowsocks-rust

这里只是记录一下尝试的过程,因为最后并没有成功。 最初的尝试是直接 sudo apt-get install cargo, 之后运行 cargo install shadowsocks-rust, 但是安装依赖库 bytes 的时候就不行了, 查了下是ubuntu源的rustc版本太低。

之后便是安装最新版的 rustc。 运行 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs|sh, 并添加 PATH=$PATH:~/.cargo/bin  ~/.bashrc, 后运行 source .bashrc; rustup update

再次 cargo install shadowsocks-rust, 这次成功安装 bytes 但是在最后编译安装 shandowsock-rust直接退出。 看错误应该存储不够,遂放弃。

shadowsocks客户端

在服务端设置后,记住ip,端口/密码,以及加密方式,就可以设置客户端了。

根据不同的系统,选择不同的客户端软件,然后新建服务器输入对应的信息就行。

这里需要查看对应的本地监听端口,比如 127.0.0.1:1080 之类的

设置本地ssh通过代理

在目录 ~/.ssh 下新建 config 文件, 并写入

Host *
   IgnoreUnknown AddKeysToAgent,UseKeychain
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa
   ProxyCommand nc -x 127.0.0.1:1080 %h %p

这里的 Host * 可以改为指定的域名, 过因为所在学校是直接封禁了ssh, 所以直接 * 通配所有ssh。

然后就是可以正常 git push pull了。

ssh密钥登录

由于这些设置的过程,发现ssh登录还是密钥比较方便, 所以最后还是设置了vultr的ssh登录, 过程十分简单。

生成密钥对 ssh-keygen,具体数据在 ~/.ssh, 主要是两个文件id_rsa, id_rsa.pub。 这一步如果设置过 github 的 git 操作,应该是已经有的。

之后需要上传 id_rsa.pub 到服务器对应用户根目录的 .ssh 文件夹下的 authorized_keys 文件。

这一步可以手动操作,也可以通过 ssh-copy-id 命令, 具体来说就是 ssh-copy-id user@ip -p port, 分别填入远程用户名(user),远程服务器ip(ip),以及端口(port), 回车并输入密码,就会自动查找公钥文件(.pub),并上传内容。

之后ssh登录远程服务器就不需要在输入远程用户的密码了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注