Почему ssh-copy-id требует файла закрытого ключа

ssh-copy-id был очень полезен для отправки открытых ключей на сервер. Но это не удастся, если у вас нет файла с закрытым ключом.

$ ssh-copy-id -i my_friend_rsa.pub root@example.com

/usr/bin/ssh-copy-id: ERROR: failed to open ID file 'my_friend_rsa': No such file

Я не понимаю этого поведения.

У меня два случая:

  1. Я отправляю свой собственный открытый ключ
  2. Я отправляю коллеге открытый ключ.

Первый случай - редкость. На сервере уже есть мой открытый ключ, если я могу подключиться к нему. Так что в этом случае мне не нужен ssh-copy-id .

Второй случай встречается очень часто. Предоставляю доступ другому пользователю. Но у меня нет ни его, ни ее закрытого ключа. Таким образом, такое поведение делает ssh-copy-id бесполезным во втором случае.

Пожалуйста, объясните мне, почему ssh-copy-id требует файл закрытого ключа?

2
задан 5 October 2016 в 21:08
3 ответа

Как пользователь windows, я могу сказать, что жаль, что у нас нет скрипта ssh-copy-id. Но если вы потратите некоторое время на изучение его интерьера, вы можете узнать, что его можно легко заменить следующей командой:

grep ^AuthorizedKeysFile /etc/ssh/sshd_config | awk '{print $2}' | xargs -I{} sh -c 'ssh-add -L >> {}; sort -u {} -o {}';echo  "ForwardAgent yes" >~/.ssh/config

Просто выпустите эту команду сразу после входа в систему, и в следующий раз вы сможете авторизоваться с помощью своего ключа, это так просто. Если по каким-то причинам это не сработает, пожалуйста, опишите вашу систему немного в комментариях. Помните, что ваш ssh-клиент должен быть настроен на использование агента, пересылки и пароля, чтобы эта команда работала. Вот экран настроек шпаклевки.

P.S. Если вам интересно, то он работает и в linux -> linux...

.
0
ответ дан 3 December 2019 в 09:15

Из-за того, как работает эта программа. Ссылаясь на man ssh-copy-id :

ssh-copy-id - это сценарий, который использует ssh (1) для входа на удаленный компьютер (предположительно с использованием пароля для входа, поэтому аутентификация по паролю должна быть включена , если вы не умело использовали несколько удостоверений). Он составляет список из одного или нескольких пальцев. печатает (как описано ниже) и пытается войти в систему с каждым ключом, чтобы увидеть, установлены ли уже какие-либо из них (конечно, если вы без использования ssh-agent (1) это может привести к тому, что вам будут постоянно предлагаться парольные фразы). Затем он составляет список тех, которые не удалось войти в систему, и использование ssh позволяет входить в систему с этими ключами на удаленном сервере.

Я согласен, что иногда это может быть слишком умно, но здесь не место спрашивать «почему», поскольку мы не разработчики .

4
ответ дан 3 December 2019 в 09:15

Закрытый ключ необходим для проверки правильности установки открытого ключа (в основном это проверка работоспособности). Но ...

Вы можете использовать переключатель -f , который позволит вам скопировать только открытый ключ на сервер и не будет проверять его (, если у вас установлено достаточно нового openssh ).

Именно так раньше работал ssh-copy-id . Другая возможность - это переменная среды SSH_COPY_ID_LEGACY , которая позволяет вам восстановить это поведение:

$ SSH_COPY_ID_LEGACY=1 ssh-copy-id -i my_friend_rsa.pub root@example.com

Или вы можете просто выбрать текущую версию ssh-copy-id из ] исходный репозиторий , который поддерживает переключатель -f .

2
ответ дан 3 December 2019 в 09:15

Теги

Похожие вопросы