Если ты используешь ssh для подключения к нескольким серверам, хорошим способ отслеживания приватных ключей, будет создание файла конфигурации. Одна из причин сделать это, является предотвращение добавления ненужных ключей в ssh-agent.
Управление несколькими ключами ssh
Сохрани свои приватные ключи в разных файлах и используй ~/.ssh/config для управления ими:
Host gh
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
AddKeysToAgent yes
Сюда можно добавить больше хостов...
- Host — короткий псевдоним для хоста
- HostName — настоящий адрес хоста (url или адрес ip)
- User — имя пользователя на машине, к которой будет происходить подключение
- IdentityFile — файл, содержащий приватный ключ
- AddKeysToAgent — значение «yes» добавит агенту ключ и пароль
После этого можно протестировать только что сконфигурированное соединение с сервером с помощью команды «ssh -T gh». Не забудь использовать короткий адрес хоста (Host) для ssh-соединения. Другой пример: «git clone git@gh:/.git», здесь «gh» используется вместо «github.com». В данном случае возможно лучше использовать «Host githib.com», чтобы не менять адрес при его копировании из репозитория Github.
Настройка ssh-agent
Чтобы каждый раз не вводить пароль при использовании ssh, настроим ssh-agent для хранения приватных ключей. Добавь эти строки в ~/.bashrc для запуска агента ssh при входе:
function start_ssh_agent() {
env=~/.ssh/agent.env
function agent_load_env() {
test -f "$env" && . "$env" >| /dev/null ;
}
function agent_start() {
# set a maximum lifetime of identities with -t <seconds>
(umask 077; ssh-agent -t 3600 >| "$env")
. "$env" >| /dev/null ;
}
agent_load_env
# agent_run_state:
# 0 = agent running w/ key
# 1 = agent w/o key
# 2 = agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
fi
unset env
}
start_ssh_agent
Функция выше почти идентична функции из документации Github, разницу составляет параметр «-t», который определяет максимальный срок жизни сущностей внутри ssh-agent, и отсутствует ssh-add, потому что приватные ключи настроены на добавление их агенту через файл конфигурации.
Теперь каждый раз ты используешь ssh для содинения с сервером, приватный ключ для каждого конкретного сервера добавляется в ssh-agent и остается в памяти только на то количество времени, которое ты выберешь.
Ты так же можешь убивать текущий процесс ssh-agent при выходе, добавь следующие строки в ~/.bash_logout:
# удалить все сущности из ssh-agent
ssh-add -D > /dev/null 2>&1
# убить текущего агента (значение берется из переменной SSH_AGENT_PID)
ssh-agent -k > /dev/null 2>&1
# удалить переменные окружения ssh
unset SSH_AGENT_PID
unset SSH_AUTH_SOCK
Запусти «ps -e | grep ssh-agent», чтобы убедиться ssh-agent запущен.
Используй «ssh-add -l» для вывода всех сущностей внутри ssh-agent.
Из соображений безопасности убедись, что файлы внутри директории ~/.ssh/* имеют разрешение на чтение и запись только для владельца «chmod 600 ~/.ssh/*» (твой публичный ключ может быть доступен только для чтения для всех остальных пользователей «chmod 644 ~/.ssh/id_rsa.pub»).
Источник: DEV Community