Gogs выдает ошибку «Отказано в доступе», когда я удаляю файл открытого ключа с клиента

Я только что установил Gogs (Go Git Server) на Raspberry Pi3 с помощью официального докера gogs/gogs-rpi. изображение, которое я запускаю как было предложено:

docker run --name=gogs -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs-rpi

Я использовал свой ноутбук для регистрации пользователя-администратора через веб-интерфейс Gogs и добавил открытый ключ к учетной записи. Теперь я могу клонировать репозиторий git с пи на свой ноутбук с помощью этой команды:

git clone ssh://[email protected]:10022/peter/my_repo.git

Я ввожу ключевую фразу, и она работает просто отлично.

Теперь странная часть... Когда я удаляю файл открытого ключа (id_rsa_gogs.pub) с моего ноутбука и снова запускаю указанную выше команду, я получаю сообщение об ошибке «Отказано в доступе».

Кто-нибудь знает, что это может быть? Я уже зарегистрировал открытый ключ в Gogs. Зачем мне нужна версия открытого ключа на клиентском компьютере? Я никогда не слышал о случае, когда открытый ключ должен оставаться у клиента.

Обновление

Если я rm ключевой файл .pub и запускаю ssh -Tv [email protected] -p 10022 -i /home/peter/.ssh/id_rsa_gogs, я получаю это:

OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /home/peter/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 192.168.178.50 [192.168.178.50] port 10022.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_rsa_gogs type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_rsa_gogs-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: match: OpenSSH_7.4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 192.168.178.50:10022 as 'git'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:[REMOVED]
debug1: Host '[192.168.178.50]:10022' is known and matches the ECDSA host key.
debug1: Found key in /home/peter/.ssh/known_hosts:18
debug1: rekey after [REMOVED] blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: rekey after [REMOVED] blocks
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /home/peter/.ssh/id_rsa_gogs
Enter passphrase for key '/home/peter/.ssh/id_rsa_gogs': 
debug1: Authentication succeeded (publickey).
Authenticated to 192.168.178.50 ([192.168.178.50]:10022).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug1: Remote: Forced command.
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: PTY allocation disabled.
debug1: Sending environment.
debug1: Sending env LC_TELEPHONE = de_DE.UTF-8
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending env LC_NAME = de_DE.UTF-8
debug1: Sending env LC_MEASUREMENT = de_DE.UTF-8
debug1: Sending env LC_IDENTIFICATION = de_DE.UTF-8
debug1: Sending env LC_MONETARY = de_DE.UTF-8
debug1: Sending env LC_PAPER = de_DE.UTF-8
debug1: Sending env LC_ADDRESS = de_DE.UTF-8
debug1: Sending env LC_NUMERIC = de_DE.UTF-8
Hi there, You've successfully authenticated, but Gogs does not provide shell access.
If this is unexpected, please log in with password and setup Gogs under another user.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 3268, received 3096 bytes, in 0.2 seconds
Bytes per second: sent 15416.0, received 14604.6
debug1: Exit status 0

Кажется, это не удается, если я запускаю ssh -Tv [email protected] -p 10022 (не указывая ключевой файл напрямую):

OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /home/peter/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 192.168.178.50 [192.168.178.50] port 10022.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/peter/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4
debug1: match: OpenSSH_7.4 pat OpenSSH* compat [REMOVED]
debug1: Authenticating to 192.168.178.50:10022 as 'git'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:[REMOVED]
debug1: Host '[192.168.178.50]:10022' is known and matches the ECDSA host key.
debug1: Found key in /home/peter/.ssh/known_hosts:[REMOVED]
debug1: rekey after [REMOVED] blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: rekey after [REMOVED] blocks
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Trying private key: /home/peter/.ssh/id_rsa
debug1: Trying private key: /home/peter/.ssh/id_dsa
debug1: Trying private key: /home/peter/.ssh/id_ecdsa
debug1: Trying private key: /home/peter/.ssh/id_ed25519
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: No more authentication methods to try.
Permission denied (publickey,keyboard-interactive).

Также проверьте, возникает ли такая же проблема при регистрации и использовании ключа ssh без кодовой фразы.

Результат тот же без пароля.

Не знаю, имеет ли это значение, но у меня есть это внутри ~/.ssh/config для Gogs

Host 192.168.178.50:10022
    HostName 192.168.178.50:10022
    IdentityFile ~/.ssh/id_rsa_gogs
    User Peter

person Rotareti    schedule 14.09.2017    source источник


Ответы (2)


Host 192.168.178.50:10022
    HostName 192.168.178.50:10022
    IdentityFile ~/.ssh/id_rsa_gogs
    User Peter

ssh не принимает номер порта как часть опций Host или Hostname здесь. В результате он не распознает, что эта запись должна применяться к вашим попыткам подключения, и не применяет файл удостоверения или пользователя.

Если вам просто нужно сопоставить IP-адрес, это должно работать:

Host 192.168.178.50
    Port 10022
    IdentityFile ~/.ssh/id_rsa_gogs
    User Peter

Если вам действительно нужно сопоставить порт, это должно работать:

Match host 192.168.178.50 exec "test %p = 10022"
    IdentityFile ~/.ssh/id_rsa_gogs
    User Peter

Это запускает команду test для проверки значения порта. «%p» будет заменено значением порта, которое ssh использовало до этого момента (либо значение по умолчанию 22, либо значение из командной строки). тест также известен как [; это утилита командной строки, в основном используемая в сценариях оболочки как часть оператора if.

person Kenster    schedule 14.09.2017

Попробуйте ssh -Tv [email protected] -p 10022 -i /home/peter/.ssh/id_rsa_gogs, чтобы понять, что на самом деле вызывает ошибку.

Также проверьте, возникает ли такая же проблема при регистрации и использовании ключа ssh без парольной фразы. (даже несмотря на то, что открытые ключи не имеют парольной фразы)

person VonC    schedule 14.09.2017
comment
Спасибо за Ваш ответ! Я обновил вопрос. - person Rotareti; 14.09.2017
comment
@Rotareti Попробуйте переименовать свой /home/peter/.ssh/config, чтобы увидеть, выбран ли затем ключ id_rsa по умолчанию. - person VonC; 14.09.2017
comment
Ситуация остается прежней после mv config back_config. Только вывод ssh -Tv не показывает после этого строки 2 и 3. - person Rotareti; 14.09.2017
comment
@Rotareti У вас есть закрытый открытый ключ /home/peter/.ssh/id_rsa(.pub) по умолчанию? ssh по умолчанию должен попытаться выбрать этот ключ. - person VonC; 14.09.2017
comment
@VonC Нет, у меня разные id_rsa_xxx для каждого сервера, к которому я подключаюсь. В /home/peter/.ssh/ нет ни id_rsa, ни id_rsa.pub. Для сервера Gogs я использую id_rsa_gogs и id_rsa_gogs.pub. Однако я хотел бы удалить id_rsa_gogs.pub. - person Rotareti; 14.09.2017
comment
@Rotareti Извините, синтаксис был неправильным, как упомянул Кенстер. я изменил ответ - person VonC; 14.09.2017
comment
С исправлением @Kenster я получаю много информации от команды. См. обновленный вопрос. - person Rotareti; 14.09.2017