İş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
İş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
Yanıtlar:
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
ssh-copy-idişe yaramaz, değil mi?
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.
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.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'.
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 ; > >>.
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.
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
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
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.