Från en dag till en annan började vår företagsserver att be mig om mitt SSH-lösenord.
Det första jag kollade var att se om min nyckel fanns i .ssh/authorized_keys
på servern. Min nyckel var inne, ingenting förändrades. Även i /etc/ssh/sshd_config
har inget förändrats.
Sedan försökte jag göra denna procedur på ny installerade Ubuntu16-servern. Efter att ha slutfört dessa 5 steg frågade den nya servern mig igen om SSH-lösenord.
Kommandot ssh-copy-id
har äntligen genomfört nyckellös SSH-inloggning, men jag har märkt att det .ssh/authorized_keys
har tre rader: en som börjar med ssh-dss
och 2x som börjar med ssh-rsa
Nu kommer jag ihåg att 5 stegs procedur från länken ovan har fungerat tidigare med bara en nyckel.
Har något förändrats nyligen? Varför fungerar proceduren ovanifrån inte längre?
Redigera: Eftersom ssh-copy-id
kopierar totalt 3 nycklar till .ssh/authorized_keys
dessa nycklar finns i följande filer:
~/.ssh/id_dsa
~/.ssh/sshkey.pub
~/.ssh/id_rsa.pub
så jag raderade rad för rad från fjärr ”s .ssh/authorized_keys
-fil
borttagen ~/.ssh/id_dsa
rad – automatisk inloggning lyckades
borttagen ~/.ssh/id_rsa.pub
rad – automatisk inloggning lyckades
borttagen ~/.ssh/sshkey.pub
rad – automatisk inloggning inte lyckades – bad om lösenord
Endast innehåll från ~/.ssh/sshkey.pub
är nödvändigt. Varför SSH jämför sshkey.pub
och inte id_rsa.pub
som i exemplet från online-handledning?
Kommentarer
Svar
Det verkar som att ssh-copy-id
är bara en bekvämlighetsfunktion. Det kontrollerar om nycklarna redan exporterades till maskinen, det skapar .ssh
katalog om det behövs, men i grund och botten lägger det bara till offentliga nycklar till .ssh/authorized_keys
. ssh-copy-id
är ett skalskript (i openssh), så du kan läsa dess kod (vi `which ssh-copy-id`
) till slut:
[ "$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
Endast authorized_keys
under autentisering kontrolleras. Från openssh dokumentation :
Filen ~ / .ssh / author_keys visar allmänheten nycklar som är tillåtna för inloggning. När användaren loggar in berättar ssh-programmet servern vilket nyckelpar den vill använda för autentisering. Klienten bevisar att den har tillgång till den privata nyckeln och servern kontrollerar att motsvarande offentliga nyckel har rätt att acceptera kontot.
Jag hoppas att det här svarar din frågetitel ”ssh-copy-id versus manual copy id_rsa.pub”. Den här filen ~/.ssh/sshkey.pub
Jag har inte, så jag hoppas att du själv har löst problemen med din inställning. Hur som helst, ja, du kan bara manuellt kopiera den offentliga nyckeln till authorized_keys
använder inte ssh-copy-id
.
ssh -v your-remote-server
till din fråga.