Что, собственно, делает ssh-copy-id?

Что делает команда ssh-copy-id, точно? Я использовал его много раз, и он отлично работает. Однако, когда я пытаюсь вручную вырезать и вставлять мой .pub keyfile в мои удаленные authorized_keys, он не работает.

Я сравнил содержимое файла authorized_keys, где я вырезал и вставлял в него .pub, а затем использовал ssh-copy-id, и я не вижу различий между ними, включая пробелы.

Есть ли что-нибудь, что ssh-copy-id делает помимо копирования открытого ключа в authorized_keys?

Ответ 1

Этот маленький script действительно должен работать. Я использую его каждый раз, когда нет ssh-copy-id, например, когда я нахожусь на Mac.

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'

IMO Это лучше, чем ручная копия и вставка: в этом случае вы точно знаете, какой контент окажется в файле

Ответ 2

Обычно я копирую-вставляю ключи в authorized_keys, как вы описываете (я забыл о ssh-copy-id), поэтому он может работать. Обратите внимание, что chmod 600 ~/.ssh/authorized_keys требуется, если вы создаете файл.

ssh-copy-id - это оболочка script, поэтому вы можете открыть ее в текстовом редакторе, чтобы увидеть, что она делает, это похоже на соответствующий бит:

printf '%s\n' "$NEW_IDS" | ssh "[email protected]" "
    umask 077 ;
    mkdir -p .ssh && cat >> .ssh/authorized_keys || exit 1 ;
    if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi"

restorecon в последней строке восстанавливает контексты безопасности SELinux по умолчанию. Мне не нужно было запускать это, но это может быть необходимо в вашем случае.