Я понимаю, как я могу поместить свой открытый ключ SSH в авторизованные ключи другой машины, используя ssh-copy-id
при этом имя пользователя и пароль удаленной машины.
Как возможно обратное? Получаю открытый ключ какой-то удаленной машины (пароль не требуется, поскольку он открытый) и помещаю его в свои собственные авторизованные ключи (опять же, пароль не требуется, поскольку он мой).
решение1
ssh ${remote_host} cat .ssh/id_rsa.pub | tee -a $HOME/.ssh/authorized_keys
решение2
Вы смешиваете два разных типа ключей SSH. Хотя они похожи по структуре, у них совершенно разное предназначение.
Ваш открытый ключ — это то, что можно назватьпользовательский ключ: Хотя этопубличный, т.е. нет необходимости держать это в тайне, это неопубликованоавтоматически любыми способами. Если вы хотите разместить это на своей веб-странице, конечно, вы можете это сделать. Но вы должны сделать это самостоятельно.
С другой стороны, ключи для каждой машины называютсяключи хоста. Они автоматически обмениваются при входе в систему, поэтому их можно считатьопубликовано. Но ключи хоста не попадают в authorized_keys
файл: вместо этого они попадают в known_hosts
. Простое наличие ключа хоста от какой-то машины не даст никому никакого доступа: это просто позволяет вашему SSH-клиенту подтвердить, что машина та же самая, что и раньше, когда вы подключаетесь к ней.
Если системный администратор решит включить HostbasedAuthentication
в /etc/ssh/sshd_config
, а ключ хоста удаленного хоста находится в общесистемном /etc/ssh/ssh_known_hosts
файле, то можно будет добавить имя удаленного хоста в /etc/hosts.equiv
или /etc/ssh/shosts.equiv
разрешитькаждыйна этом удаленном хосте для входа в соответствующие учетные записи на локальном хосте без ввода пароля. Если системный администратор также устанавливает IgnoreRhosts
, no
то вы как обычный пользователь можете аналогичным образом разрешить определенному пользователю на определенном удаленном хосте получать доступ к вашей учетной записи на локальном хосте без пароля, поместив ключ хоста удаленного хоста в ваш ~/.ssh/known_hosts
и имя пользователя@имя хоста в ваш ~/.rhosts
или ~/.shosts
. Но этот метод аутентификации отключен по умолчанию.
(Как вы думаете, почему два файла, например ~/.shosts
и ~/.rhosts
? Ну, это потому, что .rhosts
файл использовался старыми незашифрованными инструментами rsh
/ rlogin
/ rexec
/ rcp
, а SSH изначально был разработан как его замена. Вы использовали бы .rhosts
или hosts.equiv
, если бы хотели разрешить доступ через оба инструмента rsh
и ssh
, и .shosts
или shosts.equiv
, если бы вы хотели разрешить только доступ по SSH.)
решение3
Используя ssh-keyscan или автоматически при подключении к неизвестному хосту, который добавит ключ в known_hosts для вас. Если вы хотите сделать это вручную, вы можете использовать команду ниже:
ssh-keyscan hostname >> ~/.ssh/known_hosts