Как из Google Colab пушить в свой GitHub

Это статья с инструкцией для тех, кто как и я столкнулся со всевозможными ошибками при попытке подключения и внесения изменений в свой репозиторий через “облачную IDE” Google Colab (далее - колаб).
Предисловие
У меня нет возможности установить на рабочий ПК какой либо софт для разработки, поэтому я пользуюсь колабом. Он хорошо справляется с простыми скриптами обработки данных и задачами парсинга, но если Вам нужна более сложная архитектура приложения, то Вы непременно столкнетесь со своеобразной средой колаба.
Каждый блокнот в колабе - это своего рода изолированная среда (.venv), в которую по умолчанию входит огромное количество библиотек. Но, если Вы хотите импортировать какой-либо класс или функцию из соседнего модуля, то Вам предстоит выполнять ряд простых, но не очевидных действий (к ним я пришел через боль), например, импортировать библиотеку для импорта.
Помимо прочего, в таком коде будут операции, связанные с подключением диска, явным указанием путей, управлением пространством для асинхронного функционала, импортом колабовских библиотек и т.д.
Очевидно, такой код надо будет чистить и отмывать от всей этой магии, если Вы захотите им поделиться вовне.
По этим и другим причинам проще работать с репозиторием.
Порядок действий:
- Генерируем ssh ключи
- Добавляем их в гитхаб
- Создаём файлы config и known_hosts
Генерация ключей SSH в колабе
Для начала создадим блокнот (файлы Google Colaboratory называют блокнотами), в котором будем прописывать все команды (или можете использовать существующий, но добавьте туда отдельную ячейку кода).
Команды будем вводить со знаком !
вначале. Так среда блокнота поймёт, что это консольная команда, а не питоновский код. Пример: !git –help
Подключаться к GitHub будем через ssh-ключи. Для этого необходимо сгенерировать их в корне гугл диска, и там уже есть скрытый каталог .ssh
.

В блокноте пишем и запускаем код:
!ssh-keygen -t rsa -b 4096 -C "your_email@ex.com"
Пояснение
-t rsa — указывает тип ключа;
-b 4096 — длина ключа в битах;
-C "your_email@ex.com" — комментарий, который поможет Вам запомнить назначение ключа (обычно указывается email)
Увидим:

По умолчанию, ключи будут сохранены в директорию root/.ssh
. Нажмите Enter, чтобы принять стандартную директорию, или введите новое местоположение, если требуется (указанный каталог должен существовать). Затем будет предложено ввести кодовую фразу (passphrase) и повторить, а можно оставить её пустой, нажать Enter и продолжить настройку.
passphrase?
Passphrase — это фраза, состоящая из нескольких слов, используемая для защиты информации. Она сложнее для взлома, чем обычный пароль, и легче запоминается благодаря своей смысловой нагрузке.
Добавление ключей в GitHub
Следующий шаг - идём в root/.ssh, открываем файл id_rsa.pub в любом текстовом редакторе и копируем его содержимое в буфер.
переходим в настройки (Settings) аккаунта Github -> вкладка SSH and GPG keys -> кнопка New SSH key:

В первое поле вводим любое имя для ключа, второе оставляем без изменений, а в третье вставьте содержимое файла id_rsa.pub. Сохраните ключ (кнопка Add SSH key).
Создание файлов config и known_hosts
Возвращаемся в блокнот. Сейчас мы должны создать файлы config и known_hosts в каталоге root/.ssh
Оба файла нужны для управления доступом к GitHub с помощью SSH-ключей. Переходим в каталог:
%cd ~/.ssh
# Обратите внимание, с командой cd мы используем % а не !
Для создания файлов выполняем команды:
!touch config
!touch known_hosts
Открываем config в любом текстовом редакторе и добавляем туда следующее:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Это конфигурация для подключения к GitHub через SSH.
Открываем known_hosts в любом текстовом редакторе и добавляем туда следующее:
github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=
Эти строки представляют собой публичные ключи для серверов GitHub, используемые для аутентификации пользователей при подключении через SSH.
Готово! Теперь при подключении к GitHub Ваш SSH-клиент будет знать эти ключи, сможет безопасно устанавливать соединение и пушить в мейн.
!git add .
!git commit -m 'some commit'
!git push origin main
Спойлер
Говорят, что команда !ssh github.com
автоматически добавляет информацию в config, а ещё есть аналогичная команда для формирования known_hosts. Но у меня эти команды не прошли. Вероятно, проблема в специфике колаба, а может я что-то не так сделал.