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?
Her zaman şifreyi girmek zorunda kalmadan ssh ile uzaktan giriş yapabilmek istiyorum.
Yanıtlar:
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.
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.
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.
ssh-keygen
bunu oluşturarak bir id_rsa
ve id_rsa.pub
dosyası yaratabilirsiniz . pub
Dosya sunucuları bitenler, özel anahtar (olan id_rsa
) sizinle kalır ve kendinizi tanıtmanızı nasıl budur.ssh-copy-id user@server
kullanı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@server
bir şifre gerekmeden erişebilirsiniz .ssh-keygen
ekrandaki talimatları izlemeniz, ardından ssh-copy-id user@server
uzaktaki kullanıcı ve sunucunuzla uzaktaki makineyle kullanıcı yerine yazmanız
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
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.
touch
ve chmod
Rinzwind yanıtında komuta?
.ssh/authorized_keys
Dosyayı 0600'a chmod etmeniz gerekecek, yoksa bu işe yaramayacak
Normalde sshpass
bunun için kullanıyorum, yükleyin sudo apt-get install sshpass
ve böyle kullanın
sshpass -p 'password' ssh your_username@your_server
sshpass
uzak sunucudaki kimlik doğrulama yöntemini değiştiremediğiniz durumlarda çok yararlıdır!
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
PasswordAuthentication no
tü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.
Permission denied (publickey).
olan PasswordAuthentication no
. Ne yapmalıyım PasswordAuthentication no
Başka bir ana bilgisayarda değiştirebilir miyim ?
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
Son zamanlarda bu çözümü GCE'de yeni açılmış yeni vm görüntülerine uzaktan giriş yapmak için kullandı.
puttygen
puttygen indirwinscp
winscp indirÖzel bir anahtara sahipseniz:
Aç puttygen
, yükle düğmesine basın ve özel anahtar ( *.pem
) dosyanızı seçin.
Özel bir anahtara sahip değilseniz:
puttygen
,(kaynak 1'den, aşağıda verilen bağlantıdan)
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_keys
dosyaya yapıştırın .
Bu dosyada yalnızca bir satır metin olduğundan emin olun.
Yetkili_ anahtar dosyasını uzak makinedeki ana dizine yükleyin.
.ssh
Dizin oluştur (yoksa)
authorized_keys
Dosyayı .ssh
dizine kopyalayın .
(Bu var olan herhangi bir authorized_keys
dosyayı 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 ssh
her seferinde kimlik bilgilerini girmeden uzaktaki makineye girebileceksiniz .
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_keys
taşı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@server
tekrar 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-agent
yerel olarak bu sıkıştırmayı önlemek için Ubuntu anahtarlığını kullanabilirsiniz, böylece her zaman yazmak zorunda kalmazsınız.
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.
Sırasıyla uygulamalar ssh
ve scp
uzaktan 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ı:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
veya $HOME/.ssh/authorized_keys2
sunucuya ekleyin .Üç farklı kimlik doğrulama protokolü türü vardır. Ssh-keygen çalıştırırken türünü belirtirsiniz:
chmod 0700
bu 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 .ssh-keygen -t rsa
ve dosyalar id_rsa
(özel anahtar) ve id_rsa.pub
(genel anahtar) ile sonuçlanır.ssh-keygen -t dsa
ve 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 -1
güçleri kullanımı RSA1 ise şifreler (protokol sürümünü 1), ssh -2
kuvvetler 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 .ssh
satı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).
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"
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 -1
veya -2
seç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-add
kayıt olmanız gerekir . Daha fazla bilgi için bu programlar için man sayfalarına bakınız.sshd
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ı
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/config
müş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.