动机
colab有诸多不便,如更换runtime和超时,本地文件会丢失。如果挂载google drive在项目层面上也很不方便,唯一方便的是使用github repository,但是如果是非公开的repo也很大费周章。这里我提供通过deploy key让colab相对一劳永逸使用github非公开repository的方法。这在项目开发上会比较有用。
思路
通过colab的一个runtime的公钥在github上建立一个专门给colab用的deploy key,然后保存下对应的私钥。以后每次开colab,就都创建一次同一个私钥文件,就可以每次git clone(或其他操作,如果赋予write权限)同一个github的私密repository了,完全不依赖密码,非常适合小组工作。
具体操作
第一部分:预备 (只需要做一次就一劳永逸)
- 打开一个colab,开一个runtime创建一对公钥和私钥
! ssh-keygen -t rsa -b 4096
- 显示公钥,把显示的内容复制粘贴进
colab - 项目setting - deploy key - add new key
的对话框里,创建一个部署密钥
! cat /root/.ssh/id_rsa.pub
- 复制私钥做一个备份,随后显示私钥,并且复制私钥内容
! cp /root/.ssh/id_rsa /root/.ssh/id_rsa_backup
! cat /root/.ssh/id_rsa
- overwrite私钥文件,把刚刚复制的私钥黏贴进
<openssh private key target>
的内容里
with open("/root/.ssh/id_rsa", mode="w") as fp:
fp.write("""<openssh private key target>""")
- 测试是不是可以成功git clone,如果成功跳过第二部分的debug直接去第三部分,如果这部分失败务必保留现在在的colab runtime不能断开,去第二部分
! ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
! chmod go-rwx /root/.ssh/id_rsa
! git clone git@github.com:<username>/<repository_name>.git
第二部分:debug第一部分
因为在/root/.ssh/
的位置手动重写私钥文件id_rsa
时很可能因为多了一个回车和漏了一个回车导致私钥的格式不对而导致失败,这时刚才创建的备份就起了作用,用下面的命令来检查自己写的write命令对不对,多数情况能告诉你那里漏了回车,重复debug直到你能通过第一部分的测试,那时你获得了正确的write命令,而这条命令在第三部分至关重要。
! diff /root/.ssh/id_rsa /root/.ssh/id_rsa_backup
第三部分:正式部署
这部分是你每次打开一个新的colab或者新的runtime需要做的了,就是手动把记录下来的私钥写进文件,它和第一部分的测试内容是基本一致的,第二个write命令也就是你第二部分小心调试后的成果。
! mkdir -p /root/.ssh
with open("/root/.ssh/id_rsa", mode="w") as fp:
fp.write("""<openssh private key target>""")
! ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
! chmod go-rwx /root/.ssh/id_rsa
! git clone git@github.com:<username>/<repository_name>.git
到这里配置就完成了,未来只需要第三部分的4条命令,就可以在colab或本地notebook里快捷地使用你的private git repository了,当您想要中止权限时,只需要在github里删除部署密钥即可。
2023年4月18日
威玲旺卡