Некороткий мануал по SSH + GitHub & BitBucket (на Win, почти тоже и на Lin)
Вначале надо найти ключи
$ ls -al ~/.ssh
# Спискок файлов в директории .ssh, если они есть
# id_rsa.pub # Нам интересны эти два брата, точнее этот публичный код (паб)
# id_rsa # Это для сверки с пабом
Если их нет, то будем генерить, после чего ласково попросят пароль, он должен быть сложным, в конечном итоге вводится он будет только один раз при старте сессии.
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
Кстати, пароль можно и поменять:
$ ssh-keygen -p # Введете старый, а потом новый.
Консоль выведет следующее:
# Your identification has been saved in /Users/you/.ssh/id_rsa.
# Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
Теперь надо добавить ваши ключи в ssh-агент
Удостоверьтесь в том, что он у вас есть — запустите
$ ssh-agent -s
Должен быть следующий однострочный (!) вывод, номер pid будет другим, все остальное от лукавого:
Agent pid 59566
Если нет, то скорее всего в терминале другая оболочка, тогда:
$ eval $(ssh-agent -s)
Agent pid 59566
Вот теперь можно добавить ключи в ssh-агент
$ ssh-add ~/.ssh/id_rsa
Далее, добавим ключи в VCS-сервисы github и bitbucket, для этого скопируйте содержимое
id_rsa.pub, и вставьте в настройках своего аккаунта на VCS (например, "SSH and GPG keys" для Github). Активируем ключи.
для github:
$ ssh -T git@github.com
чуть длинней, для bitbucket, вначале надо создать файл-конфиг,
~/.ssh/config, куда добавить следующие строки:
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa # Тут приватный ключ!
После чего запустить следующую команду:
$ ssh -T git@bitbucket.org
В каждом случае, если все пройдет успешно, то вы получите следующие сообщения:
Hi #{username}! You've successfully authenticated, but GitHub does not provide shell access.
или
conq: logged in as tutorials.
You can use git or hg to connect to Bitbucket. Shell access is disabled.
К слову, что Github, что Bitbucket выдали мне в этот раз такое:
Thу authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is 12:12:12...12.
Are you sure want to conecting (yes/no)?
Ответил yes, консоль что-то ответила и все работает.
Если же вы используете алиасы для хостов, то и активация должна быть через алиас:
$ ssh -T git@alias
Если работаете с Sourcetree (рекомендую для винды), то есть такой момент, что программа не принимает стандартный формат этих ключей и что бы работать с программой через ssh придется из полученного ключа (приватный) сгенерировать их в другом формате понятном putty. Для этого используется программа puttygen. Которая входит в поставку Sourcetree.
Занудно, но уже финал близок, далее нам нужно настроить
~/.bashrc, которого на винде нет, именно он будет содержать инициализационные настройки для консоли и запускать ssh-агент, который будет включать ваши ключи, запоминать сессию:
# Note: ~/.ssh/environment should not be used, as it
# already has a different purpose in SSH.
env=~/.ssh/agent.env
# Note: Don't bother checking SSH_AGENT_PID. It's not used
# by SSH itself, and it might even be incorrect
# (for example, when using agent-forwarding over SSH).
agent_is_running() {
if [ "$SSH_AUTH_SOCK" ]; then
# ssh-add returns:
# 0 = agent running, has keys
# 1 = agent running, no keys
# 2 = agent not running
ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
else
false
fi
}
agent_has_keys() {
ssh-add -l >/dev/null 2>&1
}
agent_load_env() {
. "$env" >/dev/null
}
agent_start() {
(umask 077; ssh-agent >"$env")
. "$env" >/dev/null
}
if ! agent_is_running; then
agent_load_env
fi
# if your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
agent_start
ssh-add
elif ! agent_has_keys; then
ssh-add
fi
unset env
И снова не финал, скорее всего так как вы не пользовались SSH, то ваши уже существующие локальные репо будут работать по
http/https, поэтому надо сменить адреса. Адреса удаленных репозиториев проверяются командой
$ git remote -v
. Для смены адресов git есть специальная команда:
$ set-url
, ввести следующее:
$ git remote set-url origin git@github.com:USERNAME/OTHERREPOSITORY.git
Вернуть все на Родину можно аналогично