Parolasız SSH giriş bilgilerini nasıl ayarlayabilirim?


252

Her zaman şifreyi girmek zorunda kalmadan ssh ile uzaktan giriş yapabilmek istiyorum.

  • Nasıl ayarlarım?
  • Parola içermeyen bir oturum yürütmek için farklı bir komut gerekli mi?

Openssh kullanıyor musunuz? (eğer öyleyse kolay;))
Rinzwind

@Rinzwind, OpenSSH önceden kuruluyken neden tescilli versiyonunu almaktan rahatsız oluyorum?
Oxwivi


1
@Kevin, lütfen kendini açıkla. Şifresiz sshing yapmaktan bahsediyoruz, ki bu genellikle iyi bir uygulamadır . Kök kabuğuna dalmak mı demek istiyorsun? Bu, bu sorunun kapsamı dışında.
Oxwivi

@Oxwivi: Üzgünüz, bu, kök girişinde hedeflenen Ravindra'nın cevabı üzerine yapılmış bir yorum olmalıydı.
Kevin

Yanıtlar:


266

Cevap

Bu komutları yürütün:

ssh-keygen

Ardından yeni anahtarı sunucunuza kopyalamanız gerekir :

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

Anahtar kopyalandıktan sonra, makineye normal şekilde ssh yapın:

ssh user@host

Artık komutları uyguladığınız makineden bir şifre girmeden giriş yapabilirsiniz.

Örnek

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

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

açıklama

Bu, sunucunuza SSH ile başarılı bir şekilde bağlanabildiğinizi varsayar.

Sizi bir şifre kullanmadan tanımlamanıza izin verecek bir SSH Keypair oluşturmanız gerekecektir. İsterseniz şifreleri bir şifre ile korumayı tercih edebilirsiniz, ancak bu şifre tamamen şifresiz SSH erişimi sağlayan boş bırakılabilir.

  1. Öncelikle SSH Keypair'inizi çalıştırarak ssh-keygenbunu oluşturarak bir id_rsave id_rsa.pubdosyası yaratabilirsiniz . pubDosya sunucuları bitenler, özel anahtar (olan id_rsa) sizinle kalır ve kendinizi tanıtmanızı nasıl budur.
  2. Daha sonra, genel anahtarı sunucunuza kopyalayın; ssh-copy-id user@serverkullanıcıyı uzak kullanıcı ve sunucunuzla makinenin DNS adı veya IP adresiyle değiştirin. SSH şifreniz istenir, girilir ve başarılı bir şekilde tamamlanırsa makineye ssh user@serverbir şifre gerekmeden erişebilirsiniz .

Referanslar


11
@Owwivi bu cevap, bunu yapmanın daha doğru yoludur - ancak daha uzun görünmektedir. Yapmanız gereken tek şey, ssh-keygenekrandaki talimatları izlemeniz, ardından ssh-copy-id user@serveruzaktaki kullanıcı ve sunucunuzla uzaktaki makineyle kullanıcı yerine yazmanız
Marco Ceppi

3
Bu hatayı "Ajan anahtarı kullanarak imzalayamadığımı kabul etti" hatası yaptım. Bu prosedürü uyguladıktan sonra giriş yapmaya çalışırken Çözüm yerel makinede "> ssh-add" komutunu çalıştırmaktı ve şimdi beklendiği gibi uzaktaki makineye giriş yapabiliyorum.
jmbouffard

1
Bu @server için özel bağlantı noktasını kullanmak gerekiyorsa, bunu yapmak gerekir bahsetmek değer: ssh-copy-id "not-marco@127.0.0.1 -p 1234".
s3m3n

@Rinzwind: Bu, passwd kimlik doğrulamasını devre dışı bırakıp yalnızca anahtar kimlik doğrulamasına izin verdiğimde bilinmeyen bir istemciden / makineden sunucuma kimlik doğrulaması yapamayacağım anlamına mı geliyor? Bilinen / yapılandırılmış istemcinin sunucuya iletişim kurması için oluşturulan özel anahtarı kullanarak bilinmeyen bir makineden giriş yapılmasına izin vermenin bir yolu var mı? Yani, bu özel anahtar taşınabilir mi ve acil durumlarda ihtiyaç duyduğumda kendimi sunucuya tanıtmak için kullanılabilir mi?
Rajat Gupta

4
Ancak sunucu hala şifresini istiyor ,,,
Lerner Zhang

34

Aşağıdaki komutları yazın:

  1. ssh-keygen

    Enterİstemi alana kadar tuşuna basın.

  2. ssh-copy-id -i root@ip_address

    (Bir kez ana bilgisayar sisteminin şifresini isteyecektir)

  3. ssh root@ip_address

Şimdi şifreniz olmadan giriş yapabilmelisiniz.


25

Bunu genelde benim yaptığım şekilde:

ssh-keygen -t rsa

(Bir şifre sorulduğunda boş bırakın)

Sonra: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Bu, .ssh klasörünün, hedeflenen ana bilgisayar adındaki giriş dizininde olmasını ve içinde yetkili_keys dosyası olmasını gerektirir)

Elbette, kullanıcı adını istediğiniz kullanıcı adıyla ve ana bilgisayar adını istenen ana bilgisayar adı veya IP adresiyle değiştirin

Ondan sonra, alıştığınız gibi sadece bu kutuya SSH.


Ne hakkında touchve chmodRinzwind yanıtında komuta?
Oxwivi

7
.ssh/authorized_keysDosyayı 0600'a chmod etmeniz gerekecek, yoksa bu işe yaramayacak
Marco Ceppi

Bu gerçekten yardımcı oldu, çünkü sunucumda root için çalışacak ssh-copy-id'i bulamadım. backuppc'nin (veya başka herhangi bir arka plan programının) başka bir makineye ssh göndermesi gereken durumda olması gerekir.
Adam,

18

Normalde sshpassbunun için kullanıyorum, yükleyin sudo apt-get install sshpassve böyle kullanın

sshpass -p 'password' ssh your_username@your_server

6
Neden ssh anahtarlarını kullanmıyorsunuz?
enzotib

1
Bu bir "neden olmasın" durumu değil, yine de anahtar eklemeden mükemmel çalışıyor, söyleyeceğim başka bir yöntem.
Bruno Pereira,

Sshpass hakkındaki bilgi için teşekkürler, daha önce hiç duymadım.
Panter

7
SSH anahtarları, sorunun "doğru" cevabıdır, ancak sshpassuzak sunucudaki kimlik doğrulama yöntemini değiştiremediğiniz durumlarda çok yararlıdır!
Jacob Krall

9
Bu çok tehlikelidir, bash_history'de ya da bağlandığınız ana bilgisayarların sade şifreleri ne olursa olsun ..
kappa

10

Parola Kimlik Doğrulamasını Devre Dışı Bırak

SSH sunucularına sahip birçok kişi zayıf şifreler kullandığından, çevrimiçi saldırganların çoğu SSH sunucusunu arayacak ve şifreleri rasgele olarak tahmin etmeye başlayacaktır. Bir saldırgan bir saat içinde binlerce şifreyi deneyebilir ve yeterince zaman verilen en güçlü şifreyi bile tahmin edebilir. Önerilen çözüm, parola yerine SSH anahtarlarını kullanmaktır. Normal bir SSH anahtarı olarak tahmin edilmesi zor olmak için, bir şifrenin 634 rasgele harf ve rakam içermesi gerekir. Bilgisayarınıza her zaman bir SSH anahtarıyla giriş yapabilecekseniz, şifre kimlik doğrulamasını tamamen devre dışı bırakmanız gerekir.

Parola doğrulamasını devre dışı bırakırsanız, yalnızca özel olarak onayladığınız bilgisayarlardan bağlanmak mümkün olacaktır. Bu, güvenliğinizi büyük ölçüde artırır, ancak yanlışlıkla PC'nizi onaylamadan veya kendi anahtarını yanlışlıkla sildiğinizde kendi dizüstü bilgisayarınıza bir arkadaşınızın bilgisayarından bağlanmanızı imkansız hale getirir.

Yapmamanız için özel bir nedeniniz yoksa, parola doğrulamayı devre dışı bırakmanız önerilir.

Parola doğrulamasını devre dışı bırakmak için sshd_config dosyanızda aşağıdaki satırı arayın:

#PasswordAuthentication yes

şuna benzeyen bir çizgiyle değiştirin:

PasswordAuthentication no

Dosyayı kaydettikten ve SSH sunucunuzu yeniden başlattıktan sonra, giriş yaparken bir şifre sormanız bile istenmemelidir.

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


2
Bu en temel doğru cevap ama güvenlik için iyi! Kök girişini devre dışı bırakmak da başka bir iyi olan
FreeSoftwareServers

Does PasswordAuthentication notüm kullanıcıları etkiler? Değilse, normal kullanıcılar için nasıl kapatabilirim ama test ederken kök için değişmeden bırakabilirim? Gerçekten onu korkutup tamamen kendimi kilitlemek istemiyorum.
Adam

Bir ssh oturumunu açık tutun, böylece tekrar değiştirebilirsiniz. Şifreleri VE kökü devre dışı bırakmak istiyorsun. Evet, fubar yapabilirsiniz. Yapma;)
Thufir

SSH sırasında bir hata var Permission denied (publickey).olan PasswordAuthentication no. Ne yapmalıyım PasswordAuthentication noBaşka bir ana bilgisayarda değiştirebilir miyim ?
ParisaN

9

Bu çözüm kullanan kullanıcılar için özel olarak ise , Windows için ssh üzerinde bulut resimler de dahil olmak onların uzak makinelere AWS Cloud ve GCE Cloud

feragat

Son zamanlarda bu çözümü GCE'de yeni açılmış yeni vm görüntülerine uzaktan giriş yapmak için kullandı.


Kullanılan aletler:

  1. puttygen puttygen indir
  2. winscp winscp indir

Gerçekleştirilecek adımlar:

  1. Puttygen kullanarak genel / özel anahtar çifti oluşturun.
  2. Genel anahtarı sunucunuza bulut veya uzak bir konumdan yükleyin.

Nasıl yapılır:

1. Bir anahtar / çift oluşturun veya mevcut özel anahtarı kullanın

Özel bir anahtara sahipseniz:

puttygen, yükle düğmesine basın ve özel anahtar ( *.pem) dosyanızı seçin.


Özel bir anahtara sahip değilseniz:

  • puttygen,
  • Parametreler bölümünden istediğiniz anahtar tipini SSH2 DSA (RSA veya DSA kullanabilirsiniz) seçin . Parola alanını boş bırakmanız önemlidir.
  • Basın generateve talimatları izleyin (kamu / özel) anahtar çiftini oluşturmak için.

Örnek Anahtar Üretimi pic

(kaynak 1'den, aşağıda verilen bağlantıdan)

2. Yeni bir 'yetkili_ anahtar' dosyası oluşturun (ile notepad)

Genel anahtar verilerinizi PuTTY Anahtar Üreticisi'nin "OpenSSH yetkili_ anahtarlar dosyasına yapıştırmak için genel anahtar" bölümünden kopyalayın ve anahtar verilerini authorized_keysdosyaya yapıştırın .


Bu dosyada yalnızca bir satır metin olduğundan emin olun.


3. Linux sunucusuna anahtar yükleyin

  • WinSCP’yi açın,
  • SFTP dosya protokolünü seçin ve ssh bilgilerinizle giriş yapın.
  • Başarıda, uzak makinenizdeki ana dizin yapısını görürsünüz.

Yetkili_ anahtar dosyasını uzak makinedeki ana dizine yükleyin.


4. Uygun izinleri ayarlayın

.sshDizin oluştur (yoksa)


authorized_keysDosyayı .sshdizine kopyalayın .
(Bu var olan herhangi bir authorized_keysdosyayı değiştirecek , bunu not al).

Dosya varsa, bu dosyanın içeriğini varolan dosyaya eklemeniz yeterlidir.


İzinleri ayarlamak için komutları çalıştır:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

Artık sshher seferinde kimlik bilgilerini girmeden uzaktaki makineye girebileceksiniz .

Daha fazla okuma:


4

Bir genel / fiyatlandırma anahtarlığı oluşturup yeni oluşturulan genel anahtarımızı kullanarak giriş yaparsanız, şifrenizi girmeniz gerekmez. Anahtar halkanızın ve / veya ssh aracınızın yapılandırmasına bağlı olarak, anahtarınızı bir parola ile korumanız gerekebilir.

İşte size kısa yollardan biri . Oluşturulan özel anahtarın gizli kalması bu yöntemin güvenliği için çok önemlidir! Asla kimseyle paylaşmamalı veya herhangi bir kapasitede erişmesine izin vermemelisin.

Bu komut, oldukça güçlü bir anahtar oluşturur ~/.ssh/:

ssh-keygen -b 4096

İçinde ~/.ssh/genel anahtarınızı olarak bulacaksınız id_rsa.pub. İçeriği, authorized_keystaşınabilir bir medya (kalem sürücü) üzerinden taşınması veya kısa bir süre sonra sunucuda parola doğrulaması etkinleştirilerek, ardından ssh-copy-id ~/.ssh/id_rsa.pub username@servertekrar kullanılıp devre dışı bırakılarak sunucular dosyasına eklenmelidir .

Anahtarınızı bir parola ile güvenceye almayı seçtiyseniz (ilk adımda), ssh-agentyerel olarak bu sıkıştırmayı önlemek için Ubuntu anahtarlığını kullanabilirsiniz, böylece her zaman yazmak zorunda kalmazsınız.


3

Bazı eklemeler yapmak için:

  • Mac varsayılan olarak sahip değildir ssh-copy-id, kendiniz yüklemeniz gerekir:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

burada daha fazlasını bulabilirsiniz: https://github.com/beautifulcode/ssh-copy-id-for-OSX

  • port yönlendirme yaptıysanız, komut şöyle olmalıdır:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

tırnak gerekli olduğunu unutmayın.


3

Şifre olmadan uzaktan giriş / kopyalama

Sırasıyla uygulamalar sshve scpuzaktan oturum açma ve uzak kopyalama için, parola girmeden uzaktaki bir ana bilgisayarla iletişim kurmanıza olanak sağlar. Bu, aşağıda açıklanan gibi bir kimlik doğrulama prosedürünü izlemenizi gerektirir. Müşteri, oturduğunuz makineyi, sunucuya ise şifre girmeden giriş yapmak istediğiniz makineyi kastediyoruz. Kimlik doğrulama prosedürünün adımları:

  1. Makinenizde zaten yapılmadıkça, özel ve genel anahtarlar oluşturmak için ssh-keygen'i çalıştırın. Bunlar içindeki dosyalarda saklanır $HOME/.ssh.
  2. Ortak anahtar dosyasının içeriğini dosyaya $HOME/.ssh/authorized_keysveya $HOME/.ssh/authorized_keys2sunucuya ekleyin .

Üç farklı kimlik doğrulama protokolü türü vardır. Ssh-keygen çalıştırırken türünü belirtirsiniz:

  1. SSH protokolü sürüm 1, RSA1: bu varsayılan seçimdir ve dosya kimliği (özel anahtar, chmod 0700bu dosyanın başkaları tarafından okunmamasını sağlamak için alınmalıdır ) ve identity.pub (ortak anahtar) ile sonuçlanır .
  2. SSH protokolü sürüm 1, RSA : bu çalıştırılarak elde edilir ssh-keygen -t rsave dosyalar id_rsa(özel anahtar) ve id_rsa.pub(genel anahtar) ile sonuçlanır.
  3. SSH protokolü sürüm 1, DSA : Bu çalıştırılarak elde edilir ssh-keygen -t dsave dosyalar id_dsa(özel anahtar) ve id_dsa.pub(genel anahtar) ile sonuçlanır.

Ssh-keygen çalıştırırken varsayılan cevaplara güvenebilirsiniz (bir parola vermediğiniz anlamına gelir). Bu, tüm kurulum basit, aynı zamanda güvensiz hale getirir.

Bir seçenek tarafından kullanılacak anahtar türünü ssh olarak belirleyebilirsiniz ; ssh -1güçleri kullanımı RSA1 ise şifreler (protokol sürümünü 1), ssh -2kuvvetler SSH denemek için RSA veya DSA anahtarları sadece (protokol sürüm 2). Aşağıdaki örneklerde, daha fazla esnekliğe sahip olacak şekilde uzak ana bilgisayarda RSA1 ve DSA anahtarlarını oluşturup kurarız . Dizininizde .sshsatır ile bir config dosyası yapabilirsiniz

Protocol 1,2

Bu kılan ssh bir deneyin RSA1 (protokol sürüm 1) önce bağlantıyı RSA / DSA (protokol sürüm 2).

RSA1 tuşlarını kullanma

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

DSA tuşlarını kullanma

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

Anahtarları oluştururken bir parola kullanmamışsanız yapmanız gereken tek şey budur. Koşmaya ssh $ uzaktan kumandayla bağlantısını test ve bir parola girmeden giriş yapabilirsiniz eğer görebilirsiniz (eğer kullanmanız gerekebilir -1veya -2seçenekler olarak ssh ). İşlem, tabii ki, oturum açmak istediğiniz herhangi bir makine için tekrarlanabilir.

Bir parola kullandıysanız, ssh-agentözel bir kabuk başlatmak için programı çalıştırmanız ve ardından tuş / parola birleşimi ile ssh-addkayıt olmanız gerekir . Daha fazla bilgi için bu programlar için man sayfalarına bakınız.sshd

Parola içermeyen bağlantıları otomatikleştirmek için bir komut dosyası: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html adresinden kopyalandı


1

IdentityOnly öğesini evet olarak belirlediğiniz için burada tüm cevapları okudukları halde bile şifreyi girmeleri gerektiğini bulabilecekleri için bir cevap eklemek istiyorum. Buradaki cevap, git veya sunucu için anahtar olmak üzere birden çok anahtarı yönetmek için çok zaman kazandırabilir.

Anahtarı oluşturup sunucuya kopyaladıktan sonra:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

İşe yaramadığını öğrendim.

Sonra ~/.ssh/configmüşterideki dosyayı kontrol etmeye gittim , bunu en altta gördüm:

Host *
IdentitiesOnly yes

Sonra bunu eklerim:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

Sadece girerek giriş yapabilirim ssh somename.

Ardından, favori adlarınızı kullanarak birden fazla ssh anahtarı ekleyebilirsiniz ve sadece config dosyasına dört satır gibi ayarları eklemeniz yeterlidir.

Sunucu, daha sonra sunucuyu bağladığınızda girmek istediğiniz addır; HostName sunucunun ipidir; Kullanıcı, sunucuya giriş yaptığınız kullanıcı adıdır; ve kimlik dosyası, oluşturduğunuz anahtarı sakladığınız dosyadır.

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.