Pull to refresh

Как из 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. Но у меня эти команды не прошли. Вероятно, проблема в специфике колаба, а может я что-то не так сделал.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.