1

Мне нравится время от времени работать с некоторыми личными репозиториями Github со своего рабочего компьютера (Windows 7), поэтому, потратив гораздо больше времени, чем я рассчитывал узнать о том, как работает SSH, я создал другой набор ключей, зарегистрированных в моей личной учетной записи, и создал собственный хост в моем файле .ssh/config чтобы использовать их с github. Это выглядит так:

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/github_rsa
    IdentitiesOnly yes

Host github-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/{personal-username}_github_rsa
    IdentitiesOnly yes

Host *
    IdentitiesOnly yes

Некоторое время назад мне удалось настроить персональное репо на моем рабочем компьютере с пультами, выглядящими как

git@github-personal:{personal-username}/{repo}

который работал нормально. Хотя недавно я попытался настроить другой, и похоже, что он продолжает предлагать вместо этого мой файл идентификации ~/ssh/github_rsa . Запустив ssh -v git@github-personal я получаю:

debug1: Reading configuration data /c/Users/Admin/.ssh/config
debug1: /c/Users/Admin/.ssh/config line 7: Applying options for github-personal
debug1: /c/Users/Admin/.ssh/config line 13: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 1: Applying options for *
debug1: Hostname has changed; re-reading configuration
debug1: Reading configuration data /c/Users/Admin/.ssh/config
debug1: /c/Users/Admin/.ssh/config line 1: Applying options for github.com
debug1: /c/Users/Admin/.ssh/config line 13: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 1: Applying options for *
debug1: /etc/ssh/ssh_config line 5: Applying options for github.com
debug1: Connecting to github.com [192.30.252.129] port 22.
debug1: Connection established.
debug1: identity file /c/Users/Admin/.ssh/{personal-username}_github_rsa type 1
debug1: identity file /c/Users/Admin/.ssh/{personal-username}_github_rsa-cert type -1
debug1: identity file /c/Users/Admin/.ssh/github_rsa type 1
debug1: identity file /c/Users/Admin/.ssh/github_rsa-cert type -1
debug1: identity file /c/Users/Admin/.ssh/github_rsa type 1
debug1: identity file /c/Users/Admin/.ssh/github_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1
debug1: Remote protocol version 2.0, remote software version libssh-0.7.0
debug1: no match: libssh-0.7.0
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
Warning: Permanently added 'github.com,192.30.252.129' (RSA) to the list of known hosts.
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
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/Admin/.ssh/github_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Authenticated to github.com ([192.30.252.129]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
PTY allocation request failed on channel 0
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Hi {work-username}! You've successfully authenticated, but GitHub does not provide shell access.
debug1: channel 0: free: client-session, nchannels 1
Connection to github.com closed.
Transferred: sent 3568, received 1800 bytes, in 0.2 seconds
Bytes per second: sent 20744.2, received 10465.1
debug1: Exit status 1

Глядя на эти две строки:

debug1: Offering RSA public key: /c/Users/Admin/.ssh/github_rsa
...
Hi {work-username}! You've successfully authenticated, but GitHub does not provide shell access.

он явно предлагает мой стандартный рабочий ключ. Мне кажется, проблема где-то здесь:

debug1: /c/Users/Admin/.ssh/config line 7: Applying options for github-personal
...
debug1: Hostname has changed; re-reading configuration
...
debug1: /c/Users/Admin/.ssh/config line 1: Applying options for github.com

Где он сначала читает правильную конфигурацию хоста, но затем меняет свое мнение и вместо этого читает хост github по умолчанию. Я помню, что в прошлый раз у меня была похожая проблема, и я добавил IdentitiesOnly yes но ответ у меня уже есть.

2 ответа2

2

Openssh просматривает конфигурацию и не вынужден принимать только один совпадающий блок. Проблема с вашей настройкой заключается в том, что ваш псевдоним github-personal также разрешается на имя хоста github.com (строка HostName ниже), и после того, как ssh узнает об этом, он еще раз анализирует конфигурацию с этим новым знанием об имени хоста. Также опция IdentityFile не является эксклюзивной, и openssh может хранить больше ключей.

Если вы хотите, чтобы он работал таким образом, вам, вероятно, придется изменить рабочую учетную запись на другую, отличную от github.com , например, github-work . Это должно предотвратить открытие openssh к вашему другому ключу. Недостатком является, конечно, то, что вам придется перенастроить свои репозитории, но это не должно сильно навредить.

0

Здесь есть более простое решение: https://serverfault.com/a/450807/147786

В основном просто добавьте:

Host *
IdentitiesOnly yes

до конца тебя .ssh/config

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