Управление несколькими ключами ssh и настройка ssh-agent

LinuxSSHUNIX

Если ты используешь 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