Genel anahtarı bir ssh sunucusuna nasıl kopyalarsınız?


33

İşte denedim ve bir hata aldım:

$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password: 
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory

Neden iki adımda yapmıyorsun? Üzerine kopyala ve sonra ekle?
Faheem Mitha

@FaheemMitha: Bu işe yarar, teşekkürler! Aslında sorunun nedenini anlayabilirim. Lütfen yeni yazımı görelim mi?
Tim

-F parametresi ile özel anahtara ihtiyacınız yoktur, bu yüzden sadece birisinin ortak anahtarıyla anahtarı açabilirsiniz!
Kzqai

Yanıtlar:


67

OpenSSH bunu yapmak için bir komutla geliyor ssh-copy-id. Sadece uzak adresi vermeniz yeterlidir ve ortak anahtarınızı authorized_keysuzak makinedeki dosyaya ekler :

$ ssh-copy-id tim@just.some.other.server

-iYerel makinenizde genel anahtarınızı bulmak için bayrağı kullanmanız gerekebilir :

$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server

1
Teşekkürler! Neden emrim çalışmıyor?
Tim

@Tim Bu cevap açıkladı; >>Kabuğunuz tarafından işlenir ve komutu bir kabuk yerine SSH ile çalıştırıyorsunuzdur. SSH'nin kabuklarını çalıştırması ve ardından emrini yerine
getirmesi

Teşekkürler! (1) ssh-copy-id ya da çalışmıyor. Dosyayı el ile uzaktan kumandaya kopyalarım ve içeriğini eklerim, sonra çalışır. Acaba neden bu? Sunucudaki varsayılan kabuğumun, orijinal yayınımı güncellediğim bir komut dosyası olduğunu ve bunun nedeni olabileceğini gördüm. Lütfen bir göz at. (2) Acaba ssh-copy-id sadece ortak anahtarı uzaktan kumandaya kopyalarsa, özel ve ortak anahtar oluşturmazsa, olur mu?
Tim

1
SSH sunucusunun yalnızca genel anahtar kimlik doğrulamasını bir kimlik doğrulama mekanizması olarak kabul edecek şekilde yapılandırıldığını varsayalım . Bu durumda, kullanmak ssh-copy-idişe yaramaz, değil mi?
Abdull

1
@Abdull O makineyle bağlantı kurmak için başka bir tuşa zaten sahip olmadığınız sürece. Sadece SSH ile bağlantı
kuruyor

31

Her zaman böyle bir şey yapabilirsin:

scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com 
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

catYerel bir makineden ssh oturumuna girip girmeyeceğinizi bilmiyorum Sadece önerildiği gibi / tmp konumuna getirin.

Düzenleme: Bu tam olarak ne ssh-copy-idyapar. Aynen Michael'ın dediği gibi.


Teşekkürler! Merak ediyorum ssh-copy-id sadece ortak anahtarı uzaktan kumandaya kopyalamak mı. Özel ve genel anahtarı yaratmaz, değil mi?
Tim

Hayır, onu yaratmaz. Sadece ekler.
Bay Maymun

@ Bay Monkey Evet, verileri bir ssh oturumuna aktarabilirsiniz (gelen catveya başka). Tarif ettiğiniz şey eski moda yoldur; ssh-copy-idYazım hataları veya dosyalara yanlış izinler verme riski daha az olduğu için önerilir.
Gilles 'SO- kötülük'

@Gilles, Sunucuya her zaman istemciye erişiminiz olmaz, özellikle işletimi için bir bilgisayar hazırlarken, bu yöntemi kullanmanız gerekmediğinden ssh-cpy-id kullanmaktan çok daha iyidir. ayarlamadan önce ağa bağlanın.
e-info128

1
Ya da sadece boru yapabilirsiniz doğrudan hedefe : cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'.
Pablo A,

7

Bu cevap, soruda gösterilen amaçlanan çalışmanın nasıl yapıldığını açıklar.

>>Yönlendirme operatörünün özel anlamını yorumlamak için uzak bilgisayarda bir kabuk çalıştırabilirsiniz :

ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub

Yönlendirme operatörü >>normalde bir kabuk tarafından yorumlanır.

Eğer çalıştırdığınızda ssh host 'command >> file'o zaman bu garanti edilmemektedir command >> filebir kabuk tarafından yorumlanacak. Senin durumunda özel yorumlama olmadan kabuk yerinecommand >> file çalıştırılır ve bir argüman olarak komuta verildi - bir kabukta koşmakla aynı şekilde .>>command '>>' file

SSH'nin bazı sürümleri (OpenSSH_5.9) uzaktaki sunucuda otomatik olarak kabuk çağırır ve benzeri bir kabuk tarafından yorumlanacak simgeleri algıladığında komutları iletir ; > >>.


3

opensshsağlar ssh-copy-id. Dizi şöyle olurdu:

  • İyi bir 4k anahtarı oluşturun

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
    
  • Ssh-acentanızı başlatın ve benzeri bilgileri girin SSH_AGENT_PID.

    ssh-agent -s > ~/mysshagent
    source ~/mysshagent
    rm ~/mysshagent
    
  • Şimdi anahtarları SSH Temsilcinize yüklemeye başlayın

    ssh-add ~/.ssh/id_rsa4k
    
  • Yüklendiğini kontrol et

    ssh-add -l
    ssh-add -L
    

    Bu size ssh-agent’da ne olduğunu gösterecek

  • Şimdi aslında uzak bir sisteme SSH

    ssh username@remotehost.network
    
  • Artık ssh-copy-id komutunu hiçbir argüman olmadan çalıştırabilirsiniz:

    ssh-copy-id
    

    Bu, ~/.ssh/authorized_keysssh-agent'tan istenen temel bilgileri oluşturur ve doldurur.


BTW, küçük bir komut dosyası oluşturdu github.com/centic9/generate-and-send-ssh-key ... tek seferde bu adımların çoğu çalışır ve ayrıca genellikle her zaman beni baş ağrısı neden dosya / dizin izinlerini sağlar
centic

Bu, şifre girişi devre dışı bırakıldığında kullanılacak harika bir yöntemdir. Önceki bir anahtarla kimlik doğrulaması yaparken yeni bir anahtar eklenmesini sağlar.
MountainX

1

22'den başka bir port seçerken ssh-copy-id ile ilgili sorunlar yaşadım ... bu yüzden burada farklı bir ssh portu olan oneliner'ım (örn. 7572):

ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub

0

Aslında , the ssh-copy-idkomut tam olarak bunu yapar ( openssh-clientpaketten):

ssh-copy-id user@host

Not: IP adresi veya etki alanı
host anlamına gelir .


Bazı eklemek de istiyorum ek bilgi Buna

1) Hedef sunucuda SSH için farklı bir bağlantı noktası belirtebiliriz :

ssh-copy-id "-p 8127 user@host"

Not: liman önünde olmalıdır yoksa çözmez.
user@host

Kaynak

2) Açık anahtar ile bir dosya belirtebiliriz :

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

Not: seçenek bize ortak anahtarı içeren dosya ile adının uygun konumu göstermesine olanak sağlar.
-i

Bazen kullanışlı olabilir, özellikle standart olmayan bir yerde saklarsak veya bilgisayarımızda birden fazla ortak anahtara sahipsek ve belirli bir noktaya işaret etmek istiyorsak.

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.