ssh: В доступе отказано (publickey)
Один коллега работал на сервере и написал ssh root@xxx.xxx.xxx.xxx
и пароль в нашей документации.
я только что сделал ssh-keygen
на моей машине, и пытался сделать ssh -v root@xxx.xxx.xxx.xxx
с моей машины, но я получил следующую ошибку.
Кто-нибудь знает как это исправить?
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to xxx.xxx.xxx.xxx port 22.
debug1: Connection established.
debug1: identity file /Users/softtimur/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/softtimur/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.4p1 Ubuntu-10
debug1: match: OpenSSH_7.4p1 Ubuntu-10 pat OpenSSH* compat 0x04000000
debug1: Authenticating to xxx.xxx.xxx.xxx:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:Pw4cFx5c2WGJzTwTL+gsx3AMHMEuT0sei1fz5oGCrac
debug1: Host 'xxx.xxx.xxx.xxx' is known and matches the ECDSA host key.
debug1: Found key in /Users/softtimur/.ssh/known_hosts:4
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
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
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:EL7hm5LvdVADZiv662nneDEeoLKy+etj8OT61eugu4Y /Users/softtimur/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/softtimur/.ssh/id_dsa
debug1: Trying private key: /Users/softtimur/.ssh/id_ecdsa
debug1: Trying private key: /Users/softtimur/.ssh/id_ed25519
debug1: No more authentication methods to try.
root@xxx.xxx.xxx.xxx: Permission denied (publickey).
Кто-нибудь знает, как это исправить?
Изменить 1:
В моем местном Mac, curl ipecho.net/plain ; echo
возвращается 175.169.13.102
, Мне удалось открыть консоль из капельки Digital Ocean of A, затем я сделал ssh-keygen
потом в консоли я сделал ssh-copy-id softtimur@175.169.13.102
который возвратил следующее; пароль не спрашивался.
Я до сих пор не могу поверить, что сервер может записывать файлы на мой локальный mac, как если бы мой локальный mac был сервером...
2 ответа
Примером способа использования метода аутентификации с открытым ключом является следующий. Предположим, у вас есть серверы A (сервер; тот, к которому вы хотите подключиться) и B (клиент; тот, с которого вы хотите подключиться к A с помощью открытого ключа).
На A выполните следующую команду:
ssh-keygen
- Это сгенерирует пару закрытый-открытый ключ, если запустить без аргументов, это будет сделано под
~/.ssh
,
- Это сгенерирует пару закрытый-открытый ключ, если запустить без аргументов, это будет сделано под
На A запустите:
ssh-copy-id [user@]<Bs-IP-address>
Это скопирует открытый ключ, сгенерированный A в B. Это будет сделано в файле с именем
~/.ssh/authorized_keys
,Если это не работает из-за проблем с подключением или вы просто не можете подключиться из точки A в B, есть альтернативный (ручной) способ сделать это. В вашей машине, перейдите к
~/.ssh
каталог и найдите ваш файл открытого ключа. Вероятно, это будет файл с.pub
расширение. Откройте его и скопируйте содержимое, а в B добавьте / вставьте его в свой~/.ssh/authorized_keys
файл. Очень важно: этот файл должен принадлежать пользователю, группа должна быть пользователем и иметь права600
, Иначе это не сработает. Это в значительной степени то, чтоssh-copy-id
делает.
Из B попробуйте подключиться по SSH к A.
Несколько вещей, на которые стоит обратить внимание:
- Команда в пункте 2 развернет открытый ключ только для удаленного пользователя, к которому вы подключаетесь. Это означает, что если вы развернете ключ к дому
tom
пользователь, чье имя пользователяjerry
не сможет его использовать. Короче говоря, развертывание для каждого пользователя. - Если вы пытаетесь развернуть ключ для подключения к
root
убедитесь, чтоPermitRootLogin
директива в/etc/ssh/sshd_config
имеет значениеyes
или жеprohibit-password
(предпочтительно). Если установленоno
, публичный метод аутентификации не будет работать. - Никогда не передавайте закрытый ключ никому.
Приведенный выше ответ (и комментарии его автора) имеют некоторые недостатки: он смешивает роли сервера и клиента. Поскольку этот ответ (по мнению модераторов) слишком сильно отличается от оригинала, чтобы его можно было принять как простое редактирование, он опубликован здесь полностью:
Возможный способ развертывания метода аутентификации с открытым ключом: предположим, что у вас есть SSH-сервер A (сервер, к которому вы хотите подключиться) и SSH-клиент B (клиент; система, к которой вы хотите подключиться). сервер A, использующий аутентификацию с открытым ключом).
Создайте личную пару открытых/частных ключей на клиенте B.
На B выполните следующую команду:
ssh-keygen
- При этом на клиенте B будет сгенерирована пара личного закрытого-открытого ключа . При запуске без аргументов ключи будут храниться в .
Разверните свой открытый ключ на сервере A.
На B запустите:
ssh-copy-id [<user-on-A>@]<A's-IP-address>
- Это скопирует ваш открытый ключ (сгенерированный вами в B на шаге 0) в A. Это будет сделано в файле A под названием . Для аутентификации в A во время этого процесса вам необходимо предоставить другие учетные данные, например, комбинацию имени пользователя и пароля. (Сервер должен разрешить этот метод входа.)
Если вы не можете подключиться или войти на сервер А таким образом, вы можете вручную перенести свой открытый ключ на сервер А любым удобным для вас способом. На клиенте B вы найдете открытый ключ в файле, который, вероятно, заканчивается на
.pub
в вашей~/.ssh
каталог. Содержимое (строка обычного текста ASCII) должно быть добавлено к файлу на сервере A.Очень важно : этот файл должен принадлежать пользователю, группа должна принадлежать пользователю и иметь разрешения.
600
. В противном случае это не сработает. Это примерно то, чтоssh-copy-id
делает.
Из клиента B попробуйте подключиться по SSH к серверу A.
Несколько вещей, на которые следует обратить внимание:
- Тот факт, что вы смогли развернуть один из своих открытых ключей для учетной записи на сервере А (в ее
~/.ssh/authorized_keys
файл, то есть), достаточно доказать для сервера A, что вам будет разрешено войти в эту учетную запись, доказав, что вы знаете секретный ключ (который остается на B), соответствующий открытому ключу. Проще говоря: во время аутентификации с открытым ключом SSH ваш клиент подписывает запрос, сервер проверяет подпись с использованием открытого ключа. - Если вы пытаетесь развернуть ключ для подключения к A с помощью
root
, убедитесь, чтоPermitRootLogin
директива в/etc/ssh/sshd_config
имеет либо значениеyes
илиprohibit-password
(предпочтительно). Если установлено значениеno
, аутентификация общедоступным методом не будет работать. - Никому не передавайте закрытый ключ .