Tek satırda SSH nasıl


26

SSH üzerinden bir hatta başka bir bilgisayara nasıl bağlanırım? Yapacak olsam ssh host@IP, ikinci satıra şifreyi girmemi isterdi. Böyle bir şey yapabileceğimi düşünüyordum: ssh host@IP | echo passwordama bu şifre sormadan önce şifreyi giriyor.


3
Bu tür bir düşünce, internetin daha güvenli bir yer olduğu zamanlarda, telnet günlerinden gelir ve bekler. Allen'ın cevabı doğrudur, Jakuje'nin cevabı teknik olarak doğrudur, ancak çoğu yerde iş için bir araçtır.
Criggie

3
Bu, şifresiz giriş yapmak için iyi bir sorudur. Kabul edilen cevabını tekrar gözden geçirmeni rica ediyorum. Hangi Jakuje'nin cevabı - doğru ve işe yarayacak, bunu yapmanın doğru yolu Allan'ın cevabında açıklanan SSH anahtarlarıdır.
Scot

Eğer sshşifreyi stdin'den okuyacak echo password | ssh host@IPolsaydı çalışacaktı, fakat genellikle SSH doğrudan terminalden okumaya çalışıyordu.
Paŭlo Ebermann

Yanıtlar:


82

Parolanızı son derece güvensiz olduğu için komut satırına koymak yerine, kimlik doğrulaması yapmak için SSH anahtarlarını kullanmanız gerekir .

Bu işe yarar şekilde, SSH anahtarlarınızı kurduğunuzda yapmanız gereken tek şey şu komutu vermektir:

ssh user@host

ve başka bir şey yazmadan, otomatik olarak oturum açmış olursunuz.


SSH Genel Anahtarını macOS'tan Mac / FreeBSD / Linux'a kopyalayın

Bu, uzak sunucuya parola tabanlı kimlik doğrulama (bir parola yazarak) aracılığıyla erişebildiğinizi ve özel / genel anahtar parolanızı zaten oluşturduğunuzu varsa (varsa, aşağıya bakın). Aşağıdaki örnekte, RSA kullanıyoruz. Başlamak için anahtarı kopyalayalım ("home" dizininin macOS, Linux, BSD, vb. Arasında değiştiğine dikkat edin):

SCP'yi kullanma:

scp ~/.ssh/id_rsa.pub username@hostname:/Users/username/.ssh/

Ya da sadece dosyayı bulmak authorized_keys(Bu yöntemi tercih ediyorum):

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

(Anahtar adınız farklı olabilir) .ssh dizini uzak sunucuda yoksa, giriş yapmanız ve oluşturmanız gerekir.

Şimdi anahtar mac'tan uzak sunucuya kopyalandı . Uzak sunucudaki SSH Genel Anahtarı için doğru izinleri ayarlayın:

chmod 600  ~/.ssh/id_rsa.pub

Ardından, dosyayı yoksa, anahtarı SSH yetkili_ anahtarına ekleyin.

Dosya authorized_keyszaten ~/.sshkullanımda ise aşağıdaki komutu kullanın:

cat id_rsa.pub >> authorized_keys

Dosya yoksa, aşağıdaki komutları girin:

cat id_rsa.pub > authorized_keys

chmod 600 authorized_keys
chown user:group authorized_keys


MacOS'ta SSH Herkese Açık / Özel anahtar oluşturun

Uygulamalar -> Yardımcı Programlar -> Terminal seçeneklerine giderek Terminali açın.

Terminalde, anahtar üretimini başlatmak için aşağıdaki komutu kullanın

ssh-keygen -t rsa

Daha sonra, özel anahtar dosyasını oluşturmak istediğiniz yeri sağlamanız istenecektir:

Anahtarın kaydedileceği dosyayı girin ( /Users/username/.ssh/id_rsa):

Anahtarı, olduğu gibi varsayılan konumda oluşturmak için boş bırakın /Users/username/.ssh/id_rsa. Açık anahtar dosyası, aynı yerde ve aynı adla ancak .PUB uzantısıyla oluşturulur.

Sonra bir parola seçmeniz istenir. Bu özel anahtarı kullanmak için isteğe bağlı paroladır .

Enter passphrase (empty for no passphrase):

SSH anahtarınız üretildi.

Şimdi, bir parola yazdıysanız, her bağlanışınızda girmeniz gerekecektir. Yardımcı program ssh-agent, aynı oturumda olduğunuzda her bağlanışınızda manuel olarak girme gerekliliğini azaltarak şifreyi bellekte tutar. Daha fazla ayrıntı için bkz.man ssh-agent


6
Kesinlikle bu - anahtarlar internet üzerinden herhangi bir ssh erişimi için şifreleri tamamen değiştirebilir ve değiştirmelidir. Özel anahtarın güvenliğine duyulan ihtiyacı artırmanızı öneririm, bunun tüm bilgisayarlarda yayılması gereken bir şey değil.
Criggie

+1 Bu gerçekten de iyi bir cevap, sadece söylediklerinden değil, aynı zamanda bunu açıkladığın için. Kullanıcıların takip etmesi ve daha güvenli olmalarına yardımcı olan her şey kitaplarımda bir artı!
Monomeeth

7
Mükemmel cevap. Sadece eklemek istedim ssh-copy-id, yukarıdakilerden bazılarını otomatikleştirmek için iyi bir araçtır.
Scot

Bir ssh-ajanından bahsetmek de yardımcı olabilir. OS X / macOS sürümlerinin çoğu (tümü?), Birlikte gelir ve anahtar parola korumalı olsa bile parolanız olmadan oturum açmanıza izin verir.
Qsigma

1
@Scot - varsayılan olarak macOS'un bir parçası değildir ve Homebrew veya MacPorts aracılığıyla kurulmalıdır . Bir satır veya kısa, kendi kendine yazılmış bir komut dosyasıyla yapılabilecek şeyler için yazılım yükleme hayranı değilim ve bu nedenlerden dolayı cevabın kapsamı dışında olduğunu düşündüm. Ancak, iyi bir küçük yarar ve söz etmeye değer.
Allan

13

Birkaç olasılık var. Örneğiniz açıkça işe yaramayacak, ancak sshpassyardımcı programı kullanarak benzer bir şey başarabilirsiniz :

sshpass -p password ssh host@IP

Not Bu tavsiye edilmez , çünkü passworddiğer süreçler için veya kabuk tarihinin görünür olacaktır.

Aynı işlemi yapmanın çok daha iyi bir yolu SSH anahtarlarını kullanarak şifresiz kimlik doğrulamasını ayarlamaktır. Kısacası:

ssh-keygen -t rsa -f ~/.ssh/id_rsa
ssh-copy-id IP

sshpassTavsiye ettiğin gibi denedim , ancak komut bulunamadı.
Ben A.

8
Peki ... Muhtemelen yüklemek zorunda kalacaksınız. Ve hayır, tavsiye etmiyorum. Ssh anahtarlarını kullanarak şifresiz kimlik doğrulamayı ayarlayın.
Jakuje

4
@BenA. Bir kamu / özel tuş takımı tanımlayarak ve ilgili her iki makineye de kurarak şifresiz kimlik doğrulamayı ayarlayın. Bu, herhangi bir paroladan çok daha kolay (ve aslında daha güvenli)
yokuş yukarı

8
Binlerce kez hayır. sshpass, ssh konuşan ancak düzgün anahtar yapmayan cihazlara bağlanmak için kullanılan kirli bir kesittir ve asıl kullanımı kurulum komut dosyalarıdır. Çok kullanıcılı bir makinede sshpass kullanmazsınız, ps auxw | grep sshpass diğer kullanıcılara ssh şifresini söylersiniz.
Criggie

1
@Criggie, tamamen değil. Anahtar tabanlı çözümün% 100'ünü geride bıraktığımda, bir kaç içsel-ahududu Pis'e geçtim (rastgele görevler için ve rastgele istemciler tarafından erişildi; anahtarları sadece iç kullanım için kullanmak zor bir iştir). Emirlerinizi çalıştırmak aşağıdaki çıktıyı verir: pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh pi@192.168.0.208. zzzzzzzzHazır olduğu; sshpass şifrenin içeriğini maskeler. Belki de daha önceki yinelemeler daha az mahremiyetliydi.
17'de

3

Buna çok cevap vermek için çok zaman harcadım. Güvensiz olmasına ve tüm bu insanların size daha güvenli ve güvenilir bir fikir olan RSA anahtarlarını kullanmanızı söylese de , bu oldukça mümkün.

Bunun expectiçin çağrılan bir program kullanın . Expect, stdout'u izler (ve eğer doğru şekilde yapılandırılmışsa stderr'i düşünüyorum), bazı mesajları bekler ve onlara çıktı ile cevap verir. Beklentinin kendisi aslında bir betik dilidir ve aynı şeyi yaparken, zamanlama nedeniyle düzgün bir şekilde çalışabilmek için kendi senaryomu elde etmek için çok zor bir zaman geçirdim. Ancak, beklenti de denilen kullanışlı bir yardımcı program içerir autoexpect.

Autoexpect ile sizi izler ve sizin için bir beklenti betiği oluşturur. Sadece autoexpect'i ve istediğiniz komutu çalıştırın:

autoexpect ssh host@ip 

ve normalde ne yaparsan yap. Programdan çıktığınızda ( exitssh'd shell yazarak ), betiği oluşturacaktır. Yazdığınız tüm komut dosyasının bir bekleme komut dosyasında olmasını istemiyorsanız, komut dosyasını kabuğa script.expyazmadan önce komut dosyasını autoexpect (çağrılan ) komutundan çıkacak şekilde düzenleyebilirsiniz exit. Komut dosyasının sonunu değiştirmek için taşımak istediğiniz satır:

expect eof

Bu, dosyanın sonunu beklemek anlamına gelir. Bu yardımcı olur umarım!


1
Henüz kimsenin söylemediği durumda: Farklı Sormaya Hoş Geldiniz!
Synoli

2

Kullanılması expectbir test paketi dışında herhangi bir SSH bağlantısı giriş yapmak sadece düz yanlış.

@Ben-a'nın aradığı şey zaten ssh'de uygulandı. İşin püf noktası nasıl kullanılacağıdır. Yani işte gidiyor:

  1. Kullanarak bir kamu / özel keypair oluşturun ssh-keygen. ECDSA veya RSA'yı -t(veya türü olarak) kullanın ve RSA için -b(veya BITS uzunluğu olarak) 2048 veya 4096'yı kullanın . Bu yazı yazarken yeterli olacaktır. HER ZAMAN bir ŞİFRE kullanın!
  2. Yararlanın ssh-copy-id(sunucu aka) üzerine makinenin sende günlüğünü oluşturmak için belirtilen metodoloji üzerinde veya ~/.ssh/authorized_keysdosyanın. İçinde yeni oluşturduğunuz ortak anahtarın bir kopyası var.
  3. Şimdi makinede oturum açmak için kullandığınız 'sunucu' (veya istemciye) dosyasını açın ~/.ssh/config. Eğer yoksa, onu yaratabilirsiniz.
  4. Bu dosyada ihtiyaçlarınız için aşağıdakini ekleyin

    host <name you want to use for this connection>
        Hostname <DNS or IP of the server>
        user <user name you want to use>
        identitiesonly yes
        identityfile <path to the private key>
    
  5. Artık sadece ssh <name>bağlantıyı kurmak için kullanabilirsiniz , ancak anahtarınız için şifreye ihtiyacı olacaktır. Bunu çözmek için, bu amaç için geliştirilen ve ssh-agent'ı kullanın. Anahtarınızı aracıya eklemek için sadece kullanın ssh-add <path to keyfile>. Sizden şifre istenecek ve bu oturum için sizin için anahtarı güvenli bir şekilde saklayacaktır. "Ssh aracısını bulamıyor" (veya benzeri) hatası veriyorsa, bu muhtemelen aracının başlatılmadığı anlamına gelir. Bu oturum için onu kullanarak başlayabilirsiniz ssh-agent bash. Bu ajan içinde aktif olan yeni bir kabuk başlatacaktır.

Bu adımları kullanırken, yalnızca kimlik bilgilerinizi ele geçirerek sizi kimliğine bürünmesini zorlaştırmazsınız, aynı zamanda kullanılabilirliği düzenli tutar (düz şifreleri kullanmaktan daha kolaydı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.