~ / .Ssh / yetkili_anahtarlara genel anahtar eklemek beni otomatik olarak oturum açmıyor


446

Genel SSH anahtarını authority_keys dosyasına ekledim . ssh localhostşifre sormadan giriş yapmalıyım.

Bunu yaptım ve yazmaya çalıştım ssh localhost, ama yine de şifreyi yazmamı istiyor. Çalıştırmak için geçmem gereken başka bir ayar var mı?

İzinleri değiştirmek için talimatları izledim:

Aşağıdakileri yaparsam sonuç aşağıdadır ssh -v localhost.

debug1: Reading configuration data /home/john/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/john/.ssh/identity type 1
debug1: identity file /home/john/.ssh/id_rsa type -1
debug1: identity file /home/john/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.7p1 Debian-8ubuntu3
debug1: match: OpenSSH_4.7p1 Debian-8ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /home/john/.ssh/known_hosts:12
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/john/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

Sonra yukarıdaki günlükten sonra bir geçiş fazı ister. Neden bana şifre olmadan giriş yapmıyor?


5
Burada durum böyle olmasa da, Google'dan geliyorsanız ve şifreli bir giriş dizini kullanıyorsanız, sshd dizine erişemez ve bu nedenle yetkili_anahtarlar dosyanızı okuyamaz. İşte bir çözüm: bugs.launchpad.net/ubuntu/+source/openssh/+bug/362427/comments/…
Daniel Schaffer

Yanıtlar:


1097

authorized_keysDosyanın ve içinde bulunduğu klasör / üst klasörlerin izinlerini doğrulamanız gerekir .

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Daha fazla bilgi için bu sayfaya bakınız .

Ayrıca, grubun ve diğerlerinin yazma erişimini kaldırmak için ana dizininizin izinlerini değiştirmeniz / doğrulamanız gerekebilir.

chmod go-w ~

6
Yukarıda "chmod -R go-wrx foobar" daha dramatik olmasa da bir şey işe yaradı mı? Neden özyinelemeye ihtiyaç var?
Mart'ta joachim

9
İkinci kısım için, yinelemeli hale getirmek gerekli değildir, sadece yapmak chmod go-wrx foobaryeterlidir. Dosyalara bir grup veya başka bir erişiminiz varsa, özellikle de bir web dizini varsa, bunu tekrar tekrar yapmak bazı uygulamaları ciddi şekilde etkileyebilir.
StingeyB

24
OpenSSH SSS bölümünde belirtildiği gibi, kullanıcının home & .ssh dizininin yalnızca grup / diğer için kaldırılmış izinleri yazması gerekir (bu nedenle chmod go-w $HOME $HOME/.sshhile yapılır). Böylece, eğer çok eğimli iseniz, izinler her iki dizin için de 755 kadar 'açık' olabilir. En basit / en az invaziv komutlar SSS'de yer alıyor: openssh.org/faq.html#3.14
davidjb

3
Yapana kadar neden benim için işe yaramadı chmod 700 ~/.ssh && chmod 644 ~/.ssh/authorized_keys? 600
644'ün

3
Dosyaya root olarak sudo chown -R {$USER}:{$USER} ~/.ssh/yazdığım için de ihtiyacım vardı authorized_keys.
Zane Hooper

155

SELinux, yetkili_anahtarların çalışmamasına da neden olabilir. Özellikle CentOS 6 ve 7'deki kökler için. İzinlerinizin doğru olduğunu doğruladıktan sonra, bunu şu şekilde düzeltebilirsiniz:

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
restorecon -R -v /root/.ssh

7
restoreconDosyaları elle kopyaladıktan sonra, örneğin yeni bir sabit sürücüye kopyaladıktan sonra ihtiyacınız olan şey budur. (Bu durumda muhtemelen tüm dosyalarda çalıştırmalısınız. Diğer garip sorunları düzeltebilir.)
ospalh

Burada başka bir mutlu kampçı. RHEL
6.5'teki sorunum buydu

2
9/10 kez, "neden bu çalışmıyor, her zaman işe yarıyor" sorunu bir selinux sorunudur.
Andrew White

1and1 (1und1) sunucusunda benim için sorunu düzeltti
musicman

104

ssh yetkili_anahtarlarını ayarlama basit gibi görünüyor ama anlamaya çalıştığım bazı tuzakları gizliyor

- SUNUCU -

içinde / etc / ssh / sshd_config seti passwordAuthentication yes , sunucunun geçici olarak şifre kimlik doğrulamasını kabul etmesine izin verecek şekilde

- MÜŞTERİ -

cygwin'i linux öykünmesi olarak düşünün ve openssh'i kurun ve çalıştırın

1. özel ve genel anahtarlar oluşturma (istemci tarafı) # ssh-keygen

Burada basarak sadece olsun ENTER DEFAULT 2 dosya " id_rsa " ve " id_rsa.pub " in ~ / .ssh / ama bir verirsen name_for_the_key oluşturulan dosyalar kaydedilir pwd

2. yerleştirmek your_key.pub hedef makineyessh-copy-id user_name@host_name

varsayılan anahtar oluşturmadıysanız, bu yanlış giden ilk adımdır ...

ssh-copy-id -i path/to/key_name.pub user_name@host_name

3. günlüğe kaydetme ssh user_name@host_nameyalnızca varsayılan id_rsa için çalışır, bu yüzden ihtiyacınız olan 2. tuzak buradassh -i path/to/key_name user@host

( ssh -v kullanın ... neler olduğunu görmek seçeneğini kullanın)

Eğer sunucu hala şifre istiyorsa o zaman ikram ettiniz. için parola girin: Eğer tuşları oluşturduk zaman (bu normal bu yüzden)

ssh dinlemiyorsa 22 numaralı varsayılan bağlantı noktasını kullanmalısınız ssh -p port_nr

- SUNUCU -----

4. Modify / etc / SSH / sshd_config Have

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys

(durumda uncoment)

Bu, ssh'a yetkili_anahtarları kabul etmesini ve .ssh / yetkili_anahtarlar dosyasında yazılmış anahtar_adı sokması için kullanıcı ana dizinine bakmasını söyler.

Hedef makinede 5 set izin

chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Ayrıca geçiş yetkisini kapat

passwordAuthentication no

tüm ssh root / admin /....@ alan_adeniz girişimlerinin kapısını kapatmak için

6 kök olmayan tüm ev dizinlerinin sahipliğinin ve grup sahipliğinin uygun olduğundan emin olun.

chown -R ~ usernamehere
chgrp -R ~/.ssh/ user 

===============================================

7. mükemmel http://www.fail2ban.org düşünün

8. MySQL (bind = 127.0.0.1) sunucusuna erişmek için ekstra ssh TUNNEL


5
"Sadece 4 güvenlik" sadece güvenlik için değildir! SSH, kısıtlayıcı izinleri yoksa dosyayı yok sayar.
Navin

Sahipliğin sağlanması, bu listeye harika bir ek olacaktır
steviejay

1
Hakkında hiçbir fikrim yoktu ssh-copy-id! Bu adım tek başına harika bir cevap verecektir.
James Marble

1
Başka bir yerde gördüğüm 700 yerine chmod 755 ~ / .ssh bunu yapıyor gibiydi
Jim W diyor Monica

36

Ayrıca ana dizininizin başkaları tarafından yazılamayacağından emin olun

chmod g-w,o-w /home/USERNAME

Cevap buradan çalınır


4
Yapmak chmod 700 ~/.ssh ; chmod 600 ~/.ssh/authorized_keys ; chmod g-w,o-w ~benim için çalıştı. Teşekkürler.
gbraad

1
neden sadece kullanmıyorsunuz chmod og-w /home/USERNAME?
Paramvir Singh Karwal

13

umutsuz ayrıca, id_rsa.pub metnini karışık bir terminalden kopyaladığı için, yetkili_anahtarlar dosyasında fazladan yeni satırlar bulunmadığından emin olabilir.


2
Bana tam olarak böyle oldu! iki terminal aynı genişlikte olduğundan, yetkili_anahtarlar dosyasındaki iki satırı görmek için satır numaralarını açana kadar anlaması zor.
Shawn

1
Bu. Bu yüzden sadece bir saat harcadım. Ve ilk defa değil. @ bortunac'ın cevabı, gelecekte bundan kaçınmak için kullanacağım ssh-copy-id aracından bahsediyor.
xdhmoore

Ben içeriğini var id_rsa.pubkullanarak moreyerine catnedeniyle görünmeyen satır aralıklarında ölümcül oldu.
Dan Halbert

8

kullanıcı senin kullanıcı adın

mkdir -p /home/user/.ssh
ssh-keygen -t rsa
touch /home/user/.ssh/authorized_keys
touch /home/user/.ssh/known_hosts
chown -R user:user /home/user/.ssh
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/id*
chmod 644 /home/user/.ssh/id*.pub
chmod 644 /home/user/.ssh/authorized_keys
chmod 644 /home/user/.ssh/known_hosts

Kök için daha iyi:mkdir -p /home/$USER/.ssh && chown -R $USER:$USER /home/$USER/.ssh && sudo -u $USER ssh-keygen -t rsa && touch /home/$USER/.ssh/authorized_keys && touch /home/$USER/.ssh/known_hosts && chmod 700 /home/$USER/.ssh && chmod 600 /home/$USER/.ssh/id* && chmod 644 /home/$USER/.ssh/id*.pub && chmod 644 /home/$USER/.ssh/authorized_keys && chmod 644 /home/$USER/.ssh/known_hosts && vim /home/$USER/.ssh/authorized_keys # paste keys here!
Odysseus

7

Tüm izinler iyi görünse bile SELinux'un bu hatayı da tetikleyebileceğine dikkat edin. Devre dışı bırakmak benim için hile yaptı (devre dışı bırakma ile ilgili olağan feragatnameleri ekleyin).


SELinux'un müdahale ettiğini görebilirsiniz /var/log/audit/audit.log. restorecon -R -v /root/.sshözel durumumu düzeltti.
Dave Goodell

7

Genel anahtarı .ssh / yetkili_anahtarlar içinde listelemek gerekir, ancak sshd (sunucu) tarafından kabul edilmesi için yeterli değildir. Özel anahtarınız parola korumalıysa, ssh (istemci) parolasını her seferinde vermeniz gerekir. Veya ssh-agent kullanabilirsiniz veya bir GNOME eşdeğeri kullanabilirsiniz.

Sizin güncellenmiş iz bir parola-korumalı özel anahtar ile tutarlıdır. Bkz. Ssh-agent veya kullanın ssh-keygen -p.


5

Yazma komutu:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Bunu yaptıktan sonra direktifinizin şöyle olduğundan emin olun:

drwx------ 2 lab lab 4.0K Mar 13 08:33 .
drwx------ 8 lab lab 4.0K Mar 13 08:07 ..
-rw------- 1 lab lab  436 Mar 13 08:33 authorized_keys
-rw------- 1 lab lab 1.7K Mar 13 07:35 id_rsa
-rw-r--r-- 1 lab lab  413 Mar 13 07:35 id_rsa.pub

1
cevabınız kabul edilen ile nasıl farklı? 3 yıl sonra Ctrl + C Ctrl-V komutunuzu kullanarak yazdınız mı?
stinger

5

Sonunda benim için hile yapan şey, sahip / grubun kök değil kullanıcı olduğundan emin olmaktı:

chown -R ~/.ssh/ user
chgrp -R ~/.ssh/ user 

chown: geçersiz kullanıcı: '/home/lsa/.ssh/'
Stepan Yakovenko

3

Benim için çalışan "ssh-add" i deneyin.


3

Hatırlanması gereken başka bir ipucu. V7.0 OpenSSH , devralma zayıflıkları nedeniyle DSS / DSA ssh anahtarlarını varsayılan olarak devre dışı bırakır . Bu nedenle, OpenSSH v7.0 + 'nız varsa, anahtarınızın olmadığından emin olun ssh-dss.

DSA anahtarlarına takılı kalıyorsanız, dosyalarınızı sshd_configve ~/.ssh/configdosyalarınızı aşağıdaki gibi satırlarla güncelleyerek desteği yerel olarak yeniden etkinleştirebilirsiniz :PubkeyAcceptedKeyTypes=+ssh-dss


3

Benim durumumda benim koymak için gerekli authorized_keysdosyayı .openssh.

Bu konum /etc/ssh/sshd_configseçeneğin altında belirtilir AuthorizedKeysFile %h/.ssh/authorized_keys.


Sunucuya erişmeden hata ayıklamak imkansız olan (bir istemciden bağlanmaya çalışırken) sunucuda oluşabilecek bir dizi sorun var ... Bu, kötü niyetli istemcilerden bilgileri gizlemek için tasarım gereğidir, ancak ayıklama.
qneill

2

Hedef kullanıcının bir şifre ayarladığından emin olun. passwd usernameBir tane ayarlamak için çalıştırın . SSH şifresi devre dışı olsa bile bu benim için gerekliydi.


2

bu benim sorunumu çözdü

ssh-agent bash

ssh-add


Bunun ne olduğunu açıklayın lütfen.
lyuboslav kanev

Ssh-agent ssh anahtarlarınızı saklar .. bash komutu kabuğunun yeni bir örneğini başlatır. ve ssh-add anahtarlarınızın kilidini açar ve yükler
Julian

2

Dikkat etmeniz gereken başka bir konu. Oluşturulan dosyanız varsayılan değilse id_rsa ve id_rsa.pub

.Ssh / config dosyası oluşturmanız ve bağlantıyla hangi kimlik dosyasını kullanacağınızı manuel olarak tanımlamanız gerekir.

Örnek burada:

host remote_host_name
hostname 172.xx.xx.xx
user my_user
IdentityFile /home/my_user/.ssh/my_user_custom.pub

2
IdentityFile özel anahtar olmalıdır
Ken H

@KenH evet tabi. yazım hatası. bunun için özür dilerim.
Kunthar

1

Ben yayınlanan sudo chmod 700 ~/.sshve chmod 600 ~/.ssh/authorized_keysve chmod go-w $HOME $HOME/.sshyukarıdan ve ben samba hisseleri çalışma almaya çalışırken izinleri berbat ettiğini bir CentOS7 kutuyu benim sorun giderildi. Teşekkürler


1

Bir izin sorunu gibi görünüyor. Genellikle bazı dosya / dizin izinleri doğru ayarlanmazsa olur. Çoğu durumda ~/.sshve vardır ~/.ssh/*. Benim durumumda /home/xxx.

Sshd'nin günlük düzeyini değiştirerek /etc/ssh/sshd_config(arama LogLevel, olarak ayarlama DEBUG) değiştirebilir, ardından /var/log/auth.logtam olarak ne olduğunu görmek için çıkışı kontrol edebilirsiniz .


3
Bu, kabul edilen cevapla büyük ölçüde aynı görünüyor ve muhtemelen bir cevap değil, bir yorum olmalı. Biraz daha temsilcisi ile yorum gönderebileceksiniz . O zamana kadar, lütfen cevapları geçici çözüm olarak kullanmayın.
Nathan Tuggy

Üzgünüm, bu sorunun her türünü çözmenin bir yolu olduğunu düşündüm. Şimdi nasıl yapılacağını biliyorum, teşekkürler.
Joey

1

/ Etc / ssh / yetkili_anahtarlarını doldurmak için otomasyon henüz çalıştırılmadığında, sorunum değiştirilmiş bir AuthorizedKeysFile idi.

$sudo grep AuthorizedKeysFile /etc/ssh/sshd_config
#AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

1

Sadece bakmak /var/log/auth.log üzerinde sunucuya . Sunucunun olası bir saldırgana çok fazla bilgi sunması olası olmadığından, istemci tarafında -vv ile ek ayrıntılar ayarlamak yardımcı olmaz.


1

Tüm ortak anahtarı şuna kopyaladığınızdan emin olun authorized_keys; ssh rsaönek çalışmalarına anahtarı için gereklidir.


2
kullanılan ssh-copy-id
vishnu

1

dosyaların özelliklerini doğrulamanız gerekir. gerekli mülk kullanımını atamak için:

$ chmod 600 ~/.ssh/sshKey
$ chmod 644 ~/.ssh/sshKey.pub

1

Bak /var/log/auth.logiçin sunucudasshd yetkilendirme hataları.

Her şey başarısız olursa, sshdsunucuyu hata ayıklama modunda çalıştırın :

sudo /usr/sbin/sshd -ddd -p 2200

Sonra istemciden bağlanın:

ssh user@host -p 2200

Benim durumumda sonunda hata bölümünü buldum:

    debug1: userauth_pubkey: test whether pkalg/pkblob are acceptable for RSA SHA256:6bL+waAtghY5BOaY9i+pIX9wHJHvY4r/mOh2YaL9RvQ [preauth]
==> debug2: userauth_pubkey: disabled because of invalid user [preauth]
    debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa [preauth]
    debug3: userauth_finish: failure partial=0 next methods="publickey,password" [preauth]
    debug3: send packet: type 51 [preauth]
    debug3: receive packet: type 50 [preauth]

Bu bilgilerle sshd_configgirişimin sshgrup üyeleriyle kısıtlandığını fark ettim . Aşağıdaki komut bu izin hatasını düzeltti:

sudo usermod -a -G ssh NEW_USER

0

bu notta, sshd config -;

PermitRootLogin without-password

yukarıdaki gibi ayarlayın, ardından sshd'yi yeniden başlatın (/etc/init.d/sshd yeniden başlatma)

çıkış yapın ve tekrar giriş yapmayı deneyin!

varsayılan inanıyorum -;

PermitRootLogin no

0

Benim durumumda, kullanıcının grubu / etc / ssh / sshd_config yapılandırma dosyasının AllowGroups içinde ayarlanmadığı için. Ekledikten sonra her şey iyi çalışıyor.


0

Standart olmayan bir konumda ev dizini var ve sshdgünlüklerde bu satır var:

Could not open authorized keys '/data/home/user1/.ssh/authorized_keys': Permission denied

tüm izinler iyi olsa bile (diğer yanıtlara bakın).

Burada bir çözüm buldum: http://arstechnica.com/civis/viewtopic.php?p=25813191&sid=0876f069ec2aa5fdcd691a2e2e7242c2#p25813191

Benim özel durumumda:

  • içine yeni bir satır ekledi /etc/selinux/targeted/contexts/files/file_contexts.homedirs:

    • bu normal ev dizinleri için orijinal satırdır:

      /home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

    • bu benim yeni çizgim:

      /data/home/[^/]*/\.ssh(/.*)? unconfined_u:object_r:ssh_home_t:s0

  • ardından a restorecon -r /data/ve sshdyeniden başlatma


0

Bu sorun vardı ve tabii ki diğer cevaplar rağmen diğer cevapların hiçbiri, onu çözmüş olan doğru.

Benim durumumda, /rootdizinin kendisinin (örneğin değil /root/.ssh) yanlış izinlere sahip olduğu ortaya çıktı . İhtiyacım vardı:

chown root.root /root
chmod 700 /root

Tabii ki, bu izinler chmod 770ne olursa olsun (belki ) böyle bir şey olmalıdır . Ancak, özellikle engelledi sshdrağmen işlenmesinden elde /root/.sshve /root/.ssh/authorized_keyshem doğru izinlere ve sahipleri vardı.


0

Oturum açma kullanıcı grubunu başka bir kullanıcıya eklediğimde bu sorunla karşılaştım. Diyelim ki userA adında bir ssh-login kullanıcısı ve ssh-login olmayan kullanıcı userB var. userA da userA grubuna sahiptir. UserB grubunu da userA olacak şekilde değiştirdim. Açıklanan davranışa yol açar, böylece userA bir istem olmadan giriş yapamaz. UserA grubunu userB'den kaldırdıktan sonra, istemsiz oturum açma işlemi tekrar çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.