Náš podnikový server mě ze dne na den začal žádat o heslo SSH.
První věcí, kterou jsem zkontroloval, bylo zjistit, zda je můj klíč uvnitř .ssh/authorized_keys
na serveru. Můj klíč byl uvnitř, nic se nezměnilo. Také v /etc/ssh/sshd_config
se nic nezměnilo.
Pak jsem zkusil provést tento postup na čerstvě nainstalovaný server Ubuntu16. Po dokončení těchto 5 kroků mě nový server znovu požádal o heslo SSH.
Příkaz ssh-copy-id
konečně dosáhl bezklíčového přihlášení SSH, ale všiml jsem si, že .ssh/authorized_keys
má tři řádky: jeden začínající ssh-dss
a 2x začínající ssh-rsa
Nyní si pamatuji, že 5krokový postup z výše uvedeného odkazu fungoval v minulosti pouze s jedním klíčem.
Změnilo se v poslední době něco? Proč výše uvedený postup již nefunguje?
Upravit: Protože ssh-copy-id
zkopíruje celkem 3 klíče do .ssh/authorized_keys
těchto klíčů lze najít v následujících souborech:
~/.ssh/id_dsa
~/.ssh/sshkey.pub
~/.ssh/id_rsa.pub
takže jsem odstranil řádek po řádku ze vzdáleného „s .ssh/authorized_keys
souboru
smazáno ~/.ssh/id_dsa
řádek – automatické přihlášení bylo úspěšné
smazáno ~/.ssh/id_rsa.pub
řádek – automatické přihlášení bylo úspěšné
smazáno ~/.ssh/sshkey.pub
řádek – automatické přihlášení ne úspěšné – požádáno o heslo
Je nutný pouze obsah z ~/.ssh/sshkey.pub
. Proč SSH porovnává sshkey.pub
a ne id_rsa.pub
jako v příkladu z online kurzu?
Komentáře
odpověď
Zdá se, že ssh-copy-id
je pouze praktická funkce. Zkontroluje, zda již byly klíče do zařízení exportovány, v případě potřeby vytvoří adresář .ssh
, ale v zásadě přidá veřejné klíče do .ssh/authorized_keys
. ssh-copy-id
je shell skript (v openssh), takže si jeho kód (vi `which ssh-copy-id`
) můžete přečíst na konci:
[ "$DRY_RUN" ] || printf "%s\n" "$NEW_IDS" | \ ssh "$@" "exec sh -c "cd ; umask 077 ; mkdir -p .ssh && { [ -z ""`tail -1c .ssh/authorized_keys 2>/dev/null`"" ] || echo >> .ssh/authorized_keys ; } && cat >> .ssh/authorized_keys || exit 1 ; if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi"" \ || exit 1
Během ověřování se kontroluje pouze authorized_keys
. Z openssh dokumentace :
Soubor ~ / .ssh / authorized_keys uvádí veřejné klíče, které jsou povoleny pro přihlášení. Když se uživatel přihlásí, program ssh řekne serveru, který pár klíčů by chtěl použít pro autentizaci. Klient prokáže, že má přístup k soukromému klíči, a server zkontroluje, zda je odpovídající veřejný klíč autorizován k přijetí účtu.
Doufám, že to odpoví název otázky „ssh-copy-id versus ruční kopírování id_rsa.pub“. Tento soubor ~/.ssh/sshkey.pub
nemám, takže doufám, že jste problémy s nastavením vyřešili sami. Ano, veřejný klíč můžete jednoduše zkopírovat ručně do authorized_keys
nepoužívá ssh-copy-id
.
ssh -v your-remote-server
.