2

Из бесчисленных источников в Интернете я узнал, что (примерно) для входа на удаленный сервер без пароля: сгенерируйте ключ ssh, поместите версию pub в авторизованные_кейки на удаленной системе; поместите приватную версию в вашу локальную директорию ~/ .ssh/; chmod это до 0600 и пуф, ты в. Хотя это в основном правильно, я считаю, что ключ (пара) должен называться id_rsa (id_rsa.pub) или id_dsa (id_dsa.pub), чтобы SSH предлагал его удаленным серверам.

Позвольте мне вернуться немного назад. У меня есть логин SurnameG на моем локальном Mac. У меня есть учетная запись SurnameG в удаленной системе, другой сервер.

Я скопировал содержимое ~/.ssh/surnameg.pub в /home/surnameg/.ssh/authorized_keys этой системы. Я протестировал с опцией -i с моего Mac в ssh, и он работает нормально.

У меня есть ~/.ssh/id_rsa (который я сгенерировал для использования с github.com).

И, конечно же, у меня есть ~/.ssh/surnameg и даже некоторые другие ключи, которые не "пробуются", когда я пытаюсь войти в систему другим способом на otherserver.com :

ssh 1.2.3.4

Здесь я пытаюсь использовать SurnameG (текущий локальный вошедший в систему пользователь) для входа в мою SurnameG запись SurnameG на другом сервере. Я хочу, чтобы openssh предлагал ~/.ssh/surnameg при попытке соединения, но это не так - давайте более подробно рассмотрим вариант с подробным описанием:

BOX:~ SurnameG$ ssh -v 1.2.3.4
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/SurnameG/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to 1.2.3.4 [50.112.132.124] port 22.
debug1: Connection established.
debug1: identity file /Users/SurnameG/.ssh/id_rsa type 1
debug1: identity file /Users/SurnameG/.ssh/id_rsa-cert type -1
debug1: identity file /Users/SurnameG/.ssh/id_dsa type -1
debug1: identity file /Users/SurnameG/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA ax:64:3e:4a:e3:2c:e4:30:dd:36:a4:a0:9x:fa:ba:6b
debug1: Host '1.2.3.4' is known and matches the RSA host key.
debug1: Found key in /Users/SurnameG/.ssh/known_hosts:88
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/SurnameG/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Trying private key: /Users/SurnameG/.ssh/id_dsa
debug1: No more authentication methods to try.

Любопытно, что openssh предлагает только ~/.ssh/id_rsa, но это еще не все. Это также "пытается" ~/.ssh/id_dsa? Я не уверен в разнице между этими двумя (предлагая и пытаясь). Во всяком случае, если я правильно читаю, openssh никогда не пробует другие мои личные ключи в ~/.ssh/* .

Хорошо, я знаю, что могу явно описать каждый сервер в ~/.ssh/config чем-то вроде

Host otherserver
   HostName 1.2.3.4
   User surnameg
   IdentityFile ~/.ssh/surnameg

а затем войдите с

ssh otherserver

и это прекрасно, денди и отлично работает. Но на самом деле мой ~/.ssh/config становится громоздким. К сожалению, я не cd ~/.ssh && git init давным-давно. Но я отвлекся.

У меня такой вопрос: существует ли более простой, более быстрый и автоматизированный способ заставить ssh динамически пробовать больше ключей в каталоге ~/.ssh при попытке входа в систему, или редактирует вашу ~/.ssh/config для каждого сервера, который вам нужен подключиться к единственному способу настройки ssh? Я что-то не так понял о том, как SSH должен работать?

2 ответа2

2

Если вы хотите предложить одинаковые ключи всем хостам, загрузите их в агент SSH с помощью ssh-add . Многие дистрибутивы Linux запускаются один автоматически - попробуйте ssh-add -l чтобы проверить, работает ли он, а затем загрузите ключи:

ssh-add ~/.ssh/id_rsa ~/.ssh/surnameg etc.

Если агент не запускается автоматически, укажите в своем ~/.profile:

agent_running() {
    [ "$SSH_AUTH_SOCK" ] && { ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]; }
}

env=~/.ssh/agent.env
if ! agent_running && [ -s "$env" ]; then
    . "$env" >/dev/null
fi
if ! agent_running; then
    ssh-agent >"$env"
    . "$env" >/dev/null
    ssh-add ~/.ssh/id_*
fi    
unset env
2

Есть еще один возможный подход. Вы можете использовать заполнители в опции IdentityFile в ssh_config . Согласно man ssh_config:

  • %d - домашний каталог локального пользователя
  • %u локальное имя пользователя
  • %l - имя локального хоста
  • %h удалить имя хоста
  • %r удалить имя пользователя

Я использую это так (в глобальном файле ssh_config ):

IdentityFile ~/.ssh/%r@%h

Это означает, что мои файлы закрытых ключей названы как daniel@example.com .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .