github代理
设置git和系统代理
# set_proxy 127.0.0.1 7890
set_proxy() {
export http_proxy="http://${1}:${2}"
export https_proxy="http://${1}:${2}"
git config --global http.proxy $http_proxy
git config --global https.proxy $https_proxy
}
clear_proxy() {
unset http_proxy
unset https_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
}
print_proxy() {
echo http_proxy=$http_proxy
echo https_proxy=$http_proxy
git config --get http.proxy
git config --get https.proxy
}
ssh相关
ssh -R localhost:7891:localhost:17890 user@remotehost -p port
注意,如果出现意外情况,这条转发连接被动的断了。那么如果重新连上去,远程的7891端口还是会被占用(很可能是上一条转发连接在远程主机看来没有结束,因此7891被占用了)。解决方法是1. 每次主动关闭这条转发链路,而不是因为网络原因被动断开 2. 换一个端口,多等等就好了 3. 尝试设置保活
todo -D 动态端口转发,sock5代理。类似-L,将对本地端口的请求发到远程的任意端口。
查看端口占用
- lsof -i :7890 只显示已建立连接到 7890 端口的进程。
- lsof -i :7890 -sTCP:LISTEN 显示监听 7890 端口的进程。
vscode自动本地端口转发导致的网络问题
之前上网总有些时候莫名的卡,就是上不了网,不知道什么原因。今天又是这样,啥都上不了了!气死
于是分析是什么问题。先是关掉clash,ok这下可以访问百度了。然后打开clash,clash会自动设置windows系统代理,然后就啥也访问不了了。远程机场看上去可以连接,本地系统代理也是正确设置,那么看起来是本地应用程序访问localhost:7890端口的问题了。查看clash日志,一个访问请求也没,说明确实大家都没能成功访问localhost:7890端口。
一边的qq和微信倒是还能上网,似乎不受系统代理的影响。一边和友人吐槽,一边想起来换个端口会如何?于是换成了代理17890端口。马上就好了!看来是7890端口被占用了。
到底是谁占用了呢?大概率是vscode了!因为它会自动转发远程服务器上的端口,即检测远程服务器上进程侦听的端口A,然后用上面的-L把本地对本机端口A的访问转发对远程端口A的访问。那么这次为啥自动转发远程服务器的7890端口呢?因为远程服务器有进程监听7890端口。然而远程服务器的7890端口的服务是我用上面的方法,用ssh把本机7890端口转发过去方便翻墙的结果…这下死循环了
解决方法就是,把vscode的自动端口转发功能关了
ssh通过443端口连接github
从学校回到家里,发现windows和wsl2上的git都没法连接github了。先是检查了代理,没问题。wget也都能正常返回页面,那是什么问题?密钥过期了?又把已有的公钥复制到github上,显示公钥已存在。查看官方文档用ssh -vvvT git@github.com
测试一下,还是连不上,
ssh -T -ai ~/.ssh/id_rsa git@github.com
指定私钥位置,还是连不上。没办法,重新生成一个密钥对,把公钥放到github上,还是连不上。
于是问文心一言,它说:
- **SSH密钥不匹配**:确保您在GitHub上添加的公钥与您本地`.ssh`目录下的私钥匹配。
- **端口号错误**:默认情况下,GitHub使用SSH端口号`443`。请确保您正在使用正确的端口号。
- **网络问题**:有时,网络问题或防火墙设置可能会阻止连接。请检查您的网络设置,确保没有任何阻止连接的防火墙或代理服务器。
- **SSH配置问题**:您可以尝试检查`~/.ssh/config`文件,确保没有错误的配置。
端口号默认443?怎么会?查一下,然后发现了这篇博客
SSH 通过 443 端口连接 GitHub - Haozhe Zhu’s Blog
它说试着换一个端口连接ssh -T -p 443 git@ssh.github.com
,成功了!原来是我家网络不知咋的禁用了22号端口。
然后在~/.ssh/config
里添加这一行,用来冒名顶替原先的github.com,并采用443协议。这样ssh -T git@github.com
也能正常连接了,git clone git@github.com:pytorch/pytorch.git
之类的命令用的也是git@github.com
,因此也都能正常连接。
Host github.com
HostName ssh.github.com
User git
Port 443
回顾一下,发现文心一言说的80%都还挺对。语言模型的回答虽然事实上可能存在问题,但多少可以给一点解决问题的思路。
另外一个问题是~/.ssh/rsa_id的权限问题,
Permissions 0664 for '/home/user/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
应该修改权限chmod 600 rsa_id
,后两位数表示同组用户,其它用户。设置成0表示没有读写执行的权限。
apt代理
做了mlsys的实验,写cuda写的有点云里雾里。想试试triton,看起来也很简单一动,安装运行示例代码,报错Triton Error [CUDA]: device kernel image is invalid
. RuntimeError: Triton Error [CUDA]: device kernel image is invalid · Issue #1556 · openai/triton · GitHub找到一个解决方案说是triton默认在cuda 12.x下编译的,所以在11.x下会有问题,所以建议自己编译triton而不是直接从pip安装。
After build from source, Error occured “device kernel image is invalid” · Issue #1955 · openai/triton · GitHub
然后就要安装gcc 11.4,于是要加一个ppa,sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
。然后就出现网络问题了,http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu focal/main
愣是连不上。明明在环境变量http_proxy和https_proxy里设置了代理了。印象里直接设置环境变量就行了啊?
最后在这里发现apt确实需要在额外的配置文件里填写代理(
Configure proxy for APT? - Ask Ubuntu
唉,下头软件
docker代理
想要通过环境变量给拉取镜像的过程设置代理很麻烦,需要设置守护进程的环境变量,然后重启守护进程。在这过程中,原来运行的容器会被关掉。
于是尝试通过docker pull以外的手段下载镜像,然后导入docker。dockerhub不支持直接下载镜像压缩包。在网上查了,发现有以下三种做法:
- 通过脚本(python/shell),利用api来下载。不稳定,试了两个脚本,都不行。
- 在自己能翻墙的的电脑上装docker desktop,然后docker pull, docker save, docker load把镜像导入服务器。这应该是最佳方案了。然而自己不太想就为了这个事下载docker desktop
- 最后自己上了google colab,尝试通过这个项目在上面安装docker,然后下载镜像压缩包,传到colab服务器上然后下载。 GitHub - drengskapur/docker-in-colab: Run Docker inside Google Colab
- 如果镜像过大,比如5GB,直接在colab下载可能不太行。要挂载google drive然后下载…好麻烦
为了便于使用,脚本如下
def save_image(image_name):
udocker("pull "+image_name)
file_name = image_name.replace(':','_').replace("/", "_")+'.tar'
udocker("save -o "+ file_name+" " +image_name)
!gzip -c /home/user/{file_name} > /content/{file_name}.gz
其他方法:
github actions也有虚拟机,也装了docker,因此可以导出镜像并当成artifact下载,但是似乎免费账户artifact总大小限制为500MB
GitHub - wukongdaily/DockerTarBuilder: 它是一个工作流。可快速构建指定架构/平台的docker镜像
牛的,用github action里的docker将镜像下到虚拟机里,然后转存到阿里云服务器
GitHub - tech-shrimp/docker_image_pusher: 使用Github Action将国外的Docker镜像转存到阿里云私有仓库,供国内服务器使用,免费易用
基于 Cloudflare Workers 的 Docker 镜像代理工具。它能够中转对 Docker 官方镜像仓库的请求(没懂)
GitHub - cmliu/CF-Workers-docker.io: 这个项目是一个基于 Cloudflare Workers 的 Docker 镜像代理工具。它能够中转对 Docker 官方镜像仓库的请求,解决一些访问限制和加速访问的问题。
透明代理
docker pull
docker compose up会先拉取需要的镜像,然后build一个新镜像(可选),然后按照配置根据镜像拉起容器。
从文件加载镜像 docker load -i myimage.tar
从标准输入加载镜像 cat myimage.tar | docker load
WSL代理
之前整过忘了记录了。应该是wsl和本机在之间通过一个网口相连,简单设置代理转发到本机7890就可以了。
clash翻墙
用着这些翻墙软件,总有些担忧。要是软件里有后门怎么办?要是有可利用的漏洞呢?机场是不是能完全看到我的流量记录?
要是自己搭建,可能问题就不大。但是找到一个便宜好用,而且ip没被墙的外网服务器也不容易。自己也真懒得折腾了
透明代理
一般代理是在应用层代理,比如把请求转发给localhost:7890端口。这样需要设置系统代理/环境变量,如http_proxy等。透明代理不需要设置这些,只需要将机器的网关设置为代理服务器的ip就好了。代理服务器会将来自这个ip的请求交给代理应用程序进行代理。
具体操作似乎和iptable与NAT表有关。有点复杂
不过openwrt的可视化界面配起来应该挺方便的?
透明代理 - 服务器配置 | 如月专注
Site Unreachable
iptables nat表实践-CSDN博客
iptables的nat表规则的设定 | 桂子飘香
看起来NAT不仅仅可以用于内网共用公网ip上网,还可以做其它的事情呀…有时间再看吧
大半夜,头晕晕的,忽然想写点什么
无法理解GFW
想搞点技术,查点资料,都要翻墙。2023年末,翻墙软件clash被一锅端,2024年中,docker国内镜像站又被勒令关闭。全都是灰色的地带。
无法理解,建造防火墙的人,难道自己就没有翻墙上网的需求吗?还是说,想要保护”不会翻墙的,愚昧的民众“?还是说,这只是上面的任务罢了?
什么时候会变成,每家每户都要装上网络审计工具,上外网需要写申请?真的弄得像企业内网一样?大概率也许不会吧
翻墙也是生意,谁在建墙?建墙后谁会获益?好处都有啥?
- 政府可以维稳,可以维护网络空间安全
- 给国内互联网公司提供保护
- 专门建造机场的人,有丰富外网ip资源的人,也可以获利
- …
也许这就是中国特色吧,这些事情,这些我暂时无法理解的事情,背后都是有运行逻辑的。
只要这逻辑没变,事情就不会改变。