SSH'yi nasıl ayarlayabilirim ki şifremi yazmak zorunda kalmayacağım?


153

SSH'yi nasıl kurarım ki bir ana bilgisayara bağlanırken şifremi yazmak zorunda kalmayacağım?


Böyle tuşların kullanılması şifre gerektirmiyorsa tartışılabilir. Özel anahtarınızı ele geçiren herhangi birinin gerçekten kötüye kullanmasını önlemek için, kişi kendi şifresiyle koruyabilir. Tabii ki, bir kişi bu şifreyi boş bırakabilir, ancak bunun önerilmeyeceği birçok durum vardır.
Arjan

En son SSH ile en son ~/.ssh/configPubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Cygwin'de

Yanıtlar:


164

Bir SSH anahtarı oluşturun (sizde değilse)

GNOME kullanıyorsanız, denizatı uygulaması ("Şifreler ve Şifreleme Anahtarları") sizin için yapabilir: Dosya -> Yeni -> Güvenli Kabuk Anahtarı .

Eğer terminali tercih ederseniz, bir anahtar çifti üretmek için çalıştırın. Geçerli keypair türleri:ssh-keygen -t <type>

  • rsa: varsayılan
  • dsa: 1024 bit tuşlarla sınırlandırılmış hariç, daha çok veya daha az eşdeğer
  • ecdsa: daha küçük anahtarlarla aynı güvenlik, ancak SSH yazılımında nispeten yeni ve biraz nadir.
  • ed25519: Yüksek güvenlik (yan kanal saldırılarına ve zayıf rasgele sayı üreteçlerine daha dayanıklı). Çok hızlı imza üretimi. Çok yeni. Yalnızca OpenSSH> = 6.5'te mevcuttur .

Program sizden bir parola ve yeni anahtarın kaydedileceği bir yer isteyecektir . Önerilen diğer yolun kullanılması önerilir, çünkü diğer tüm araçlar orada arayacaktır.

Genel anahtarı uzak sunucuya yükleyin

Yine denizatı bunu sizin için sık sık yapabilir - Kişisel Anahtarlarım'da SSH anahtarınıza sağ tıklayın ve Güvenli kabuk için Yapılandır anahtarını seçin .

Veya, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-hostterminalde.

Veya, adım adım tamamen manuel olarak:

  1. .sshUzak ana bilgisayardaki uzak kullanıcının giriş dizininde ( önceden mevcut değilse) bir dizin oluşturun .
  2. Bu dizinde, authorized_keyszaten mevcut değilse adlı bir dosya oluşturun .
  3. Durumda uzak umasknormalden daha liberaldir, dosyayı değil grup yazılabilir yapın: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Son olarak, bir şekilde yerel ortak anahtarınızın ( ~/.ssh/id_rsa.pub) içeriğini uzaktaki ~/.ssh/authorized_keysdosyaya kopyalayın (ekleyin) .

Anahtarı ssh aracısına yükleyin

Özel anahtarınızı bir ssh aracısına yüklerseniz , şifresi çözülmüş anahtarı bellekte tutar. Bunun bir sunucuya girdiğimizde şifreyi tekrar girmemesini istiyoruz.

İlk önce, aracının başlatılması veya başlatılan bir iletişim soketinin yolunun bir değişkene yüklenmesi gerekir. Ssh-agent'ı bir terminalde çalıştırmak , ajan değişkenlerini atamak ve ayarlamak için komutlar üretecektir. Bu komutlar farklı bir terminalde kullanılmak üzere bir dosyaya kaydedilebilir. Alternatif olarak, bir kişi bu komutları çalıştırabilir ve aynı aracı başka bir terminalde tekrar kullanmayı unutabilir. örneğin: eval $(ssh-agent).

Anahtarın yüklenmesi, basit bir şekilde çalıştırılması ssh-addve geçiş cümlesi verilmesi meselesidir .

GNOME kullanıyorsanız, gnome-keyring-daemon genellikle ssh-agent ile aynı SSH ajanı işlevini sunar, bu nedenle bir şey başlatmanız gerekmez. GNOME, oturum açma sırasında da anahtarı otomatik olarak yükler ve kilidini açar.

Parola olmadan uzaktaki sunucuya Kabuk

Her şey doğru yapılmışsa, sizden bir şifre girmeniz istenmeyecektir. Temsilcide anahtarla ilgili bir sorun varsa, kullanıcı hesabının şifresini değil, şifrenin şifresini yazmanız istenir.ssh user@server

İletişim için ssh kullanan herhangi bir şey, aracıya doğru anahtar yüklendiğinde kullanıcı hesabı şifresini girmeden çalışacaktır. Scp , sftp ve rsync gibi programlar bunu kullanır.


Notlar:

  • Sadece bir SSHv2 anahtarına ihtiyacınız var, çünkü SSHv1 çok güvensiz ve artık kullanılmıyor.
  • Ayrıca yalnızca bir tür anahtara ihtiyacınız vardır - RSA veya DSA yeterlidir. (ed25519 ve ECDSA hem yenidir hem de her yerde desteklenmemektedir).
  • Tüm bu adımlar hem RSA hem de DSA anahtarları için aynıdır. DSA kullanıyorsanız, id_dsayerine kullanın id_rsave ECDSA olacaktır id_ecdsa.
  • 3.0'dan daha eski olan OpenSSH sunucuları kullanıldı authorized_keys2- fakat kullanımda 5,0'dan daha eski herhangi bir şey bulamazsınız.
  • Bu talimatlar yalnızca OpenSSH sürüm 3.0 ve daha yenileri için geçerlidir. lsh, ssh.comve diğer (Unix ve değil) SSH sunucuları bu öğreticiye dahil değildir.

Örnekler:

  • Genel anahtarı uzaktaki bir ana bilgisayara kopyalama:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # bu
    
    cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / approved_keys '# ya da
    
  • Yeniden kullanım için ajan değişkenlerini kaydetme (ayrıntılı örnek)
    ssh aracısı> ~ /. ssh / çapraz terminal aracısı
    . ~ / .Ssh / çapraz terminal madde
    

7
ah, "ssh-add {path-to-private-key-file}" demeniz gerekir ve sonra sizden parolanızı soracaksınız. Lütfen bunu yayınınızda daha belirgin yapın. Ayrıca "Dördüncü, ssh çalıştır" komutunu da eklemelisiniz. Bu belgelerin belgelendirilmesindeki problemin bir kısmı, süreçte yeni olanlar için neler olup bittiği ve bu programların birlikte nasıl çalıştığı hakkında hiçbir fikri olmayan görünüşte açık görünen adımları atlatmasıdır.
Jason S

1
Jason: ssh-add -l bir ajanın çalışıp çalışmadığını kontrol etmektir. Bağımsız değişkenler olmadan ssh-add, anahtarı varsayılan konumdan ekler (ki bu ~ / .ssh / id_rsa). Neyse, güncellendi.
Grawity

4
ssh-copy-idgenel anahtarı hedef ana bilgisayara kopyalayan ve izinleri otomatik olarak ayarlayan bir komut var.
hasen

1
Mükemmel cevap! Anahtar dosyaların dosya izinleri hakkında biraz eksik - Bugün bununla ilgili bir sorunum var. Özel anahtar dosya sadece benim tarafımdan erişilebilir olmalı ve ortak anahtar dosya sadece benim tarafımdan yazılabilir olmalıdır.
ripper234

1
Bir liner: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address(sadece değiştirin username@server-ip-or-address).
totymedli

22

Hangi Unix'te bulunduğunuzu, hangi Unix'e bağlandığınızı, hangi kabuğu kullandığınızı, hangi SSH varyantını kullandığınızı vb. Belirtmediniz. bu, birçok unix varyantında kullanılan OpenSSH'nin oldukça yeni sürümlerine dayanıyor.

Bunların hepsi yerel masaüstü sisteminizden.

ssh-keygen

Anahtar adı için varsayılanı kullandığınızdan emin olun. Bunu önermek yapmak aksi takdirde güvenlik sorunu var, o tuşun üzerinde bir parola ayarlayın. "-t rsa" kötü bir fikir olmaz, ancak muhtemelen gerekli değildir.

ssh-copy-id username@server

Bu sizden oturum açmak için kullanacağınız şifreyi soracak ve yetkililer için anahtarlar için gerekli düzenlemeleri yapacaktır. (elle yapmaya gerek yok)

Sonra bu:

`ssh-agent`

ya da belki bu:

exec ssh-agent sh

veya:

exec ssh-agent bash

Bu, anahtarınızı tutabilecek bir SSH ajanı başlatacak. Birçok modern Unix türünde, grafiksel olarak giriş yaptıysanız, bu zaten gerçekleşmiş olacaktır. İlk değişken (geri tepme çubukları ile) arka plana bir ssh-ajanı yerleştirir ve onunla konuşmak için ortam değişkenlerini ayarlar. İkincisi, aracının sizin için bir kabuk çalıştırmasını sağlayın, böylece kabuktan çıktığınızda aracıdan çıkılır.

Birçok modern Unix varyantı, özellikle grafiksel olarak giriş yaptıysanız, sizin için çalışan bir araca sahip olacaktır. " ps aux | grep ssh-agent" Veya " ps -ef | grep ssh-agent" deneyebilirsiniz ; Bir şey zaten çalışıyorsa, onu kullanın.

Sonunda:

ssh-add

Bir parola isteyecektir; ssh-keygen'e verdiğin şeyi ver. Grafiksel olarak sormanın da yolları var. Ve bunu otomatikleştirmek için ssh-agent ve ssh-add eşyalarını giriş komut dosyalarınıza koyabilirsiniz (kurulum, kullandığınız kabuğa bağlı olarak değişir), ancak bazı Unix varyantları (örneğin, geçerli Ubuntu Linux) bunun çoğunu otomatik olarak yapar. Yapmanız gereken tek şey bir anahtar oluşturmak ve uzaktaki ana bilgisayara kurmak için ssh-copy-id kullanmak.

Şimdi, " ssh username@server" herhangi bir kimlik doğrulama istemeden çalışmalı. Perdenin arkasında, ssh-ajanının tuttuğu bir anahtar kullanıyor ve ajandan bunun için sihirli imza püf noktalarını yapmasını istiyor.


11

Bunu PuTTY'de Windows'ta da yapmak mümkün .

Genel / özel anahtar çiftinizi ayarladıktan sonra tüm ayarları yapın (burada verilen yanıtların gösterdiği gibi) PuttyGen'i çalıştırın. Buraya önceden kurduğunuz mevcut özel anahtarı yükleyin ve ardından bir PuTTY özel anahtarı (ppk) olarak kaydedin.

Daha sonra PuTTY'de, otomatik olarak oturum açmak istediğiniz kaydedilmiş oturumu tıklayın ve Yükle'yi tıklayın. Buradan, sol bölmedeki Bağlantı -> Veriler bölümüne gidin ve "Otomatik oturum açma kullanıcı adı" bölümüne, o uzak sunucunun kullanıcı adını yazın:

PuTTY kullanıcı adı girişi

Bundan sonra Bağlantı -> SSH -> Auth’a gidin ve PuttyGen’de yaptığınız ppk’ye göz atın:

PuTTY özel anahtar girişi

Ardından oturum sayfasına geri dönün ve daha önce yüklediğiniz oturumu kaydedin.


İlk resim linki olan "PuTTY kullanıcı adı girişi", bozuk görünüyor.
Peter Mortensen,

2
PuTTY kendi ssh-agent versiyonunu içerir; Buna Pageant denir. Sistem tepsisinde çalışır ve anahtarınızı sizin için tutar. Hiç ssh-agent'ı çalıştırmanıza gerek yok, sadece PuTTY'nin Auth bölümündeki seçeneklerinde "Acente yönlendirmesine izin ver" seçeneğini işaretleyin ve anahtar aracınızı kullanılabilir duruma getirmek için Pageant'un bağlantısı uzak uca iletilecektir.
Kevin Panko,

3

ServerFault'daki çok benzer bir sorudan, sizin için kimlik doğrulama anahtarlarını ayarlamakla ilgili tüm adımları uygulayan ssh-copy-id kullanmanızı öneririm :

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.

Yapmanız gereken tek şey basitçe şudur:

ssh-copy-id user@host

Bir kez şifrenizi yazın ve gitmek için iyi bir konum!


3

Ssh anahtarlarının nasıl ayarlanacağına dair zaten söylenenlerin yanı sıra, Keychain'i oturum açma yerine yalnızca sistem başına bir işlem yapmanıza olanak tanıyan bir ssh-agent konsolu ön yüzü olarak öneririm .

Aynı şeyi yapan GNOME ve KDE araçları olduğunu biliyorum ama eğer konsol bağımlısı iseniz bu harika (ve çoğu Unix sistemlerinde kullanılabilir).

Kullanmak için, aşağıdakini ~/.bashrc(diğer kabukları için benzer şekilde) ekleyin :

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

2

http://linuxproblem.org/art_9.html

Senin hedefin

Görevlerinizi otomatikleştirmek için Linux ve OpenSSH kullanmak istiyorsunuz. Bu nedenle, ana bilgisayar A / kullanıcı a ile Ana Bilgisayar B / kullanıcı b arasında otomatik bir oturum açmaya ihtiyacınız vardır. Parola girmek istemiyorsunuz, çünkü ssh'yi bir kabuk betiğinden çağırmak istiyorsunuz.


1
Olumsuz oy benim değildi, ancak birkaç dakika önce benzer bir cevap gönderdiklerini fark ettikleri takdirde insanların cevaplarını silmelerini umursamıyorum.
Arjan

2
Arjan: Çoğunlukla seninle aynı fikirdeyim; Onları fazla oylamayla ödüllendirmeniz gerektiğini söylemiyorum, ancak aşağıdayken oylama zaman içinde değil, cevabın yanlış olduğu izlenimini veriyor
TheTXI

2

Bu gerçekten çok kısa bir öğretici yazdım, gerçekten gerçekten çok gerçekten hayal kırıklığına uğradım gerçekten çok uzun öğreticiler çünkü gerçekten çok basit :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2

Putty'nin-pw masaüstünde şöyle bir kısayol oluşturmanıza izin veren bir seçeneği var:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

1
  1. Bağlanan ana bilgisayarda, çalıştırın ssh-keygen. (Bir tür belirtmeniz gerektiğini söylerse, yapın ssh-keygen -t rsa.) Sizden bir dosya konumu sorduğunda, varsayılanı alın. Sizden bir şifre istediğinde, şifre girmemek için enter tuşuna basın.
  2. cat ~/.ssh/id_rsa.pub(ya da her türlü varsayılan dosya konumu içinde ssh-keygenbir olması gerekirdi olsa idi gerçekten eski sshfarklı olmak için kurulum); çıktıyı panoya kopyalayın.
  3. Hedef ana bilgisayara normalde bağlanmak istediğiniz hesap olarak oturum açın. Dosyayı düzenleyin ~/.ssh/authorized_keys(varsa ~/.ssh, bir sloginyere; doğru izinlerle oluşturmanın kolay ve basit bir yoludur). Panonuzu ( id_rsa.pubdiğer ana makineden içeren ) bu dosyaya yapıştırın .

3
Parola eklemeyi önermediğiniz için -1. Bir parola olmadan, dosyayı okuyan herkes artık meşru kullanıcı olarak gösterebilir.
bortzmeyer

2
İlk önce şifresini yazmak zorunda kalmamasını istedi; Parolası yerine parola yazmak zorunda kalmanın bir gelişme olacağını düşünmedim. İkincisi, yanılıyorsun; Bu yüzden bir genel anahtar ve özel bir anahtar var, bu yüzden genel anahtar dünyada olabilir.
kaos

Söz konusu şifre, her bağlanışınızda değil, anahtar oluşturma sırasında yazılır. Doğru?
Richard Hoskins

Hayır. Parola ile oluşturulan anahtarlar, anahtar her kullanıldığında parola girilmesini gerektirir.
kaos

2
Yanlış. Ssh-agent ile (kabul edilen cevaba bakınız), şifreyi seans başına sadece bir kez yazın.
bortzmeyer

0

Hepsini Linux'taki terminalde yapmak istiyorsanız:

Ana bilgisayarda

cd ~ / .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "istersen bazı yorum metni" -f id_ArbitraryName

{} İçindeki öğeler seçeneklerdir, rsa veya dsa kullanın ve bit boyutunu seçin (daha büyük daha güvenlidir)

O zaman izinleri yetkili_keylere ve yetkili_keys dosyalarına eklemelisiniz.

cat id_ArbitraryName.pub >> yetkilinin_ tuşları

cat id_AribtraryName.pub >> yetkili_keys2

Ardından, id_AribtraryName dosyasını, ssh yapmak istediğiniz kutuya indirin. Bağlantı kutusu unix tabanlıysa, bir config dosyası gerekli olabilir (macun içinde yukarıda belirtilen biri).

Bağlantı Kutusunda

Config dosyanızda - vim ~ / .ssh / config

Example.host.com # veya bilgisayarınızın adını barındırın

Kullanıcı kullanıcı adı

IdentityFile ~ / .ssh / id_ArbitraryName

Config dosyası 600'ün izinine ihtiyaç duyuyor. SSh klasörü 700'e ihtiyaç duyuyor.

Çok ihmal edilen config sorunla karşılaşırsanız yardımcı olur umarım.

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.