Kullanıcı adı / şifre yerine anahtar kullanarak kimliğinizi doğrulamak için ssh'ı nasıl kurarsınız?


34

Bir kullanıcı adı / şifre yerine tuşları kullanarak bir kullanıcının kimliğini doğrulamak için ssh'ı nasıl ayarlarım?

Yanıtlar:


27

Her kullanıcı için: (yerel makinelerinde) keypair'lerini kullanarak üretmelidirler ssh-keygen -t rsa( bu seçenekler tavsiye edilmese de veya rsaile değiştirilebilir ). Daha sonra ortak anahtarlarının ( ) içeriğini oturum açmakta olan sunucuya koymaları gerekir .dsarsa1id_rsa.pub~/.ssh/authorized_keys


Buna ekleyeceğim tek şey dosya ve dizindeki izinlere bakmak.
trent

2
Unutma chmod 0700 .ssh chmod 0600 .ssh / yetkili_keys
Dave Cheney

3
Anahtarları bu şekilde kesin olarak üretin ancak @ Chris Bunch'in "ssh-copy-id" ile ilgili gönderisini kontrol edin. 'İd_rsa.pub' dosyasını aktarmanın yolu budur.
Gareth

@gyaresu: Teşekkürler! Yeni bir şey öğrendim! :-D
Chris Jester-Young

23

Aslında , otomatik olarak sizin için otomatik olarak yapan * nix'te bulunan bir komut dosyası olan ssh-copy- id'i ( Mac OS X'e de kolayca yerleştirilebilir) tercih ediyorum. Man sayfasından:

ssh-copy-id, uzaktaki bir makineye giriş yapmak için ssh kullanan bir komut dosyasıdır (muhtemelen bir giriş şifresi kullanarak), bu nedenle, birden fazla kimliğin akıllıca kullanılmasını sağlamadığınız sürece, şifre doğrulamanın etkinleştirilmesi gerekir)

Ayrıca, grup yazılabilirliğini gidermek için uzak kullanıcının evini (~ / .ssh ve ~ / .ssh / yetkili_keys) izinlerini de değiştirir (aksi takdirde uzak sshd yapılandırmasında ayarlanmışsa, oturum açmanızı engeller).

-İ seçeneği verilmişse, ssh-agent'ınızda herhangi bir anahtar olup olmadığına bakılmaksızın kimlik dosyası (varsayılan olarak ~ / .ssh / identity.pub) kullanılır.


2
@Chris Bunch HERKESİNE BURADA! :) ssh-copy-id kesinlikle birinin kimliğini paylaşmanın yoludur id_rsa.pub
Gareth

1
Güzel, bunu hiç bilmiyordum ... Aynı şeyi yapmak için kendi senaryomu yazdım: - /
David Z

6

Hum, anlamadım. Sadece bir anahtar oluşturun ve başlayın. :) NASIL Ek olarak, şifre ile giriş yapmayı yasaklayabilirsiniz. Örneğin / etc / ssh / sshd_config dosyasında:

PasswordAuthentication no

2
Ayrıca UsePAM'i hayır olarak ayarlamanız gerekir (veya PAM'ı buna göre yapılandırın). Bu bölümü kaç NASIL kaçırdığı şaşırtıcı. Bunu yapmamak, hala bir şifre kullanarak giriş yapabilmenize neden olacaktır.
Nathan,

3

Bunu yapmak için oldukça yalındır - burada bulunacak basit bir yol var .

Ana noktalar:

  • Makinenle koş ssh-keygen. Bu sizin için ortak ve özel anahtarlar üretecektir.
  • Genel anahtarınızın içeriğini (muhtemelen içeride ~/.ssh/id_rsa.pub) kopyalayıp ~/.ssh/authorized_keysuzaktaki makineye yapıştırın .

Bunun, makinenizdeki özel anahtara erişimi olan herkese uzaktaki makineye aynı erişimi vereceğini hatırlatmak önemlidir, bu nedenle anahtar çifti oluşturulurken ekstra güvenlik için buraya bir parola girmeyi seçebilirsiniz.


Kopyalama yerine kes ve yapıştır tavsiye ediyorum. Yetkili_key dosyası birden fazla anahtar içerebilir ve zaten içinde bulunan diğer anahtarları gizlemek istemezsiniz.
Chris Jester-Young

En sevdiğim adım
Philip Durbin

@Chris oops - Üzerine yazmak yerine dosyaya kopyalamak istemiştim! Cevaplamak için şimdi güncellendi cevap
ConroyP '


1

Başkalarının söylediklerini özetlemek için, SSH anahtarlarını ayarlamak kolay ve paha biçilmezdir.

Makinede Eğer sshing olacağı dan size anahtar çifti oluşturmak gerekir:

claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius

İstendiğinde sadece girilip enter tuşuna basın ve istendiğinde bir parola girin - ideal olarak bu, hem ana bilgisayardaki normal giriş şifrenizden hem de SSH'niz olacak olanlardan farklıdır.

Ardından, yeni oluşturduğunuz anahtarı SSH'ye bağlanmak istediğiniz ana bilgisayara kopyalamanız gerekir . Çoğu Linux dağıtımının ssh-copy-idbunu yapmak için bir aracı vardır :

claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Dağıtımınız buna sahip değilse, anahtarı hedef ana bilgisayara kopyalamanız ve (muhtemelen var olan) .ssh/authorized_keysdosyaya eklemeniz gerekir :

claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub                                    100% 1119     1.1KB/s   00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys

Son olarak, SSH anahtarlarından en fazla faydayı elde etmek için, bir SSH ajanı çalıştırmak isteyeceksiniz. Bir masaüstü ortamı (Gnome, KDE, vb.) Kullanırsanız, o zaman oturumunuzu kapatıp tekrar açmanız sizin için bir SSH aracısı başlatacaktır. Değilse, sizin kabuğuna RC dosyası (aşağıdaki ekleyebilir .bashrc, .profilevs.):

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi

1

Bu bir kontrol listesi olarak tasarlanmıştır. Eğer biri onu nokta-noktadan takip ederse, şifresiz girişler için en sık kullanılanlar ele alınmalıdır. Bu noktaların çoğu başka yerlerde de belirtilmiştir; bu bir toplamadır.

Her makinede hesabın altında bağlantıların çıkacağı veya alınacağı bir ~/.sshdizin olmalıdır chmod 700.

(Özel) anahtarı bir parola olmadan oluşturulmalıdır veya istemcilerin kullanması için bir parola taşıyan anahtarın deşifre edilmiş bir versiyonunu tutacak bir aracı başlatılabilir. Ajanı ile başla ssh-agent $SHELL. Bulmam biraz zaman $SHELLaldı. Bir aracı kullanmak istiyorsanız, çok yönlü ayrıntılar olduğu için kılavuz sayfasına bakın.

Unutmayın ki, varsayılan olarak zayıf (<2048 bit DSA) tuşları sshd'nin son sürümleri tarafından kabul edilmez.

Aşağıdaki istemci tarafı makinesinde yapılmalıdır köken bağlantı.

  1. Özel anahtarınız uygun ~/.ssh/id_rsaveya ~/.ssh/id_dsauygun şekilde yerleştirilmelidir . Başka bir ad kullanabilirsiniz, ancak özel anahtarı açıkça belirtmek için kaynak makinedeki ssh komutunda -i seçeneğine dahil edilmelidir.

  2. Özel anahtarın olmalı chmod 600.

  3. Ana klasörün olup olmadığını kontrol edin chmod 700.

Şimdi bir makinenin istek almasına izin vermek için . Yaygın bir model, bir yöneticinin size sahip olmadığınız bir makineye erişim sağlamasıdır (paylaşılan web barındırma gibi). Bu nedenle, ssh ile ilgili fikir, size herkese açık hesap veren herkese açık anahtarınızı sunmaktır . Bu nedenle, genellikle makineye istekleri almak için özel anahtarlar girmezsiniz. Ancak, bu makinenin ssh çıkışını da yapmasını istiyorsanız, yukarıdaki adımları uygulayan bir kaynak makinası gibi davranmanız gerekir.

  1. Genel anahtarınız , bağlantıları alacak~/.ssh/authorized_keys hesabın altında adı verilen bir dosyaya yerleştirilmelidir . Bu hesap üzerinden bağlanmasına izin verilen diğer anahtarları da buraya yerleştirebilirsiniz. Vi'de iseniz ve anahtarı PuTTY'deki paste buffer'dan dosyaya yapıştırdığınızda özellikle zor bir şey şudur: anahtar bir "ssh-" ile başlar. Ekleme modunda değilseniz, ilk "s" ekleme moduna vi koyacak ve tuşun geri kalanı sadece iyi görünecektir. Ancak anahtarın başında bir "s" eksik olacak. Bunu bulmam günler sürdü.
  2. Ben mi chmod 600 ~/.ssh/authorized_keys. En azından gw olmalı.
  3. Şimdi, önbelleğe ana bilgisayar parmak izinin eklenmiş olması gerekir. Makineye A gidin ve makineye manuel olarak Ssh uygulayın. İlk kez, "ana bilgisayar anahtar önbelleğine eklemek ister misiniz?" Gibi bir sorgu alırsınız. Bu oturumu kullanmak için otomasyon (bir komut dosyası gibi) almaya çalışıyorsanız, otomasyon tarafından kullanılan ssh istemcisinin bu istemi alamayacağından emin olmalısınız.

0

Diğerlerinin de söylediği gibi, kullanıcılarınız ssh-keygen ile kendi müşteri makinelerinde kendilerine anahtarlıklar yapmalı ve oturum açmak istedikleri makinedeki ~ / .ssh / yetkili_ anahtarlarına açık anahtar eklemelidir.

Yine de daha ayrıntılı bilgi için SSH, The Secure Shell'i tavsiye ederim .


0

Burada iyi bir tavsiye var, bu yüzden tekrar etmeyeceğim. Anahtarlarla oturum açmanıza izin vermek için bir sunucuyu ayarladıktan sonra, başkalarını da bu liner ile yapacak şekilde ayarlayabilirsiniz:

remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done

Sadece ana dizininize gidin, uzak değişkeni bir veya daha fazla sunucu adı olarak tanımlayın ve bir kerede bir demet yapın. İstediği şifre, uzaktaki sunucu için ssh şifreniz olacak. Elbette for-loop olmadan basitleştirilmiş bir versiyon kullanabilirsiniz:

tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"

UNUTMAYIN: Sadece genel anahtarlarınızı kopyalayın. Özel anahtarlarınızın, sudo'lu kişilerin kopyalayabileceği ve parolanızı zorla girebileceği bir sunucuda oturmasını istemezsiniz.

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.