動機(jī)
colab有諸多不便贮折,如更換runtime和超時昨凡,本地文件會丟失导街。如果掛載google drive在項目層面上也很不方便耻蛇,唯一方便的是使用github repository吭从,但是如果是非公開的repo也很大費(fèi)周章番刊。這里我提供通過deploy key讓colab相對一勞永逸使用github非公開repository的方法。這在項目開發(fā)上會比較有用影锈。
思路
通過colab的一個runtime的公鑰在github上建立一個專門給colab用的deploy key芹务,然后保存下對應(yīng)的私鑰。以后每次開colab鸭廷,就都創(chuàng)建一次同一個私鑰文件枣抱,就可以每次git clone(或其他操作,如果賦予write權(quán)限)同一個github的私密repository了辆床,完全不依賴密碼佳晶,非常適合小組工作。
具體操作
第一部分:預(yù)備 (只需要做一次就一勞永逸)
- 打開一個colab讼载,開一個runtime創(chuàng)建一對公鑰和私鑰
! ssh-keygen -t rsa -b 4096
- 顯示公鑰轿秧,把顯示的內(nèi)容復(fù)制粘貼進(jìn)
colab - 項目setting - deploy key - add new key
的對話框里中跌,創(chuàng)建一個部署密鑰
! cat /root/.ssh/id_rsa.pub
- 復(fù)制私鑰做一個備份,隨后顯示私鑰菇篡,并且復(fù)制私鑰內(nèi)容
! cp /root/.ssh/id_rsa /root/.ssh/id_rsa_backup
! cat /root/.ssh/id_rsa
- overwrite私鑰文件漩符,把剛剛復(fù)制的私鑰黏貼進(jìn)
<openssh private key target>
的內(nèi)容里
with open("/root/.ssh/id_rsa", mode="w") as fp:
fp.write("""<openssh private key target>""")
- 測試是不是可以成功git clone,如果成功跳過第二部分的debug直接去第三部分驱还,如果這部分失敗務(wù)必保留現(xiàn)在在的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
時很可能因為多了一個回車和漏了一個回車導(dǎo)致私鑰的格式不對而導(dǎo)致失敗,這時剛才創(chuàng)建的備份就起了作用议蟆,用下面的命令來檢查自己寫的write命令對不對闷沥,多數(shù)情況能告訴你那里漏了回車,重復(fù)debug直到你能通過第一部分的測試咐容,那時你獲得了正確的write命令舆逃,而這條命令在第三部分至關(guān)重要。
! diff /root/.ssh/id_rsa /root/.ssh/id_rsa_backup
第三部分:正式部署
這部分是你每次打開一個新的colab或者新的runtime需要做的了戳粒,就是手動把記錄下來的私鑰寫進(jìn)文件路狮,它和第一部分的測試內(nèi)容是基本一致的,第二個write命令也就是你第二部分小心調(diào)試后的成果享郊。
! 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了炊琉,當(dāng)您想要中止權(quán)限時,只需要在github里刪除部署密鑰即可又活。
2023年4月18日
威玲旺卡