Parola olmadan otomatik ssh-keygen, nasıl?


86

Daha ssh-keygensonra kullanacağım bazı pub / özel keypairs'i çağıran ve yaratan otomatik bir script yapmak istiyorum . Prensipte her şey yolunda gider ...
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... ancak benden anahtarları şifreleyecek şifreyi sorması dışında. Bu, otomasyonu zorlaştırır.

Komut satırı argümanı yoluyla bir parola sağlayabilirim -N thepassphrase, böylece istemin görünmesini engellemek için. Yine de anahtarlara ( ayrıca şifreleme ile güvence altına alınmış) sahip olmayı istemiyorum ve tuş takımlarının düz metin olmasını istiyorum.

Bu sorunun (en iyi) çözümü nedir?

-qGüya hala parola etkileşimini önlemek değil "/ sessiz sessiz" anlamına seçeneği. Ayrıca böyle bir şey bulamadım
ssh-keygen ...... -q --no-passphrase

Lütfen beni "eksik parola" nın ekseni ve eksileri hakkında vaaz etmeye veya ders vermeye başlamayın, bunun farkındayım. Etkileşimli biçimde (bir komut dosyası olarak değil), kullanıcı [ENTER] düğmesine iki kez basabilir ve anahtar düz metin olarak kaydedilir. Böyle bir senaryoda ulaşmak istediğim şey bu:

#! / Bin / bash

command1
command2
var = $ (Command3)

# bu betiği durdurmamalı ve şifre sormamalıdır
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

Yanıtlar:


105

Bu, parola komut isteminin görünmesini ve düz metin halinde saklanacak anahtar çiftini ayarlamasını önler (elbette ki tüm dezavantajlarını ve risklerini taşır):

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""

3
Bu çalışıyor. Durumda /tmp/sshkeyzaten kimse de, üzerine yazan istemini alır bulunmaktadır. Bu, stdin'in yeniden yönlendirilmesi / kapatılması ile önlenebilir - örneğin ekleme yoluyla 0>&-.
maxschlepzig

34

İstediğinizi yapmak için bulduğum en basit yol şudur (varsayılan dosya adını kullanan örnek)

    cat /dev/zero | ssh-keygen -q -N ""

Eğer ~/.ssh/id_rsadosya zaten var, komut şey değiştirmeden çıkılacak.

Değilse, bu dosya adında yepyeni bir anahtar alırsınız.

Her iki durumda da, hiçbir şeyin üzerine yazmadınız ve sonunda bir anahtarınız olduğunu biliyorsunuz.


onaylandı: lubuntu 14.04.2 tarihinde
user77115

Gerçekten sessizlik istiyorsanız, çıktıyı / dev / null konumuna yönlendirin:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Chris Gregg

(Kuşkusuz antika) SLES 11'de, yukarıdaki komut bir anahtar üretemedi. yes "" | ssh-keygen -N "" >&- 2>&-ancak gayet iyi çalışıyor ve herhangi bir şey çıkarmıyor (bir anahtar dosyasının zaten var olup olmadığı) ve önceden var olan bir anahtar dosyanın üzerine yazmıyor.
zrajm

Doğrulanmış Ubuntu trusty (
14.04

2
Neden kedi / dev / sıfır kullanıyorsunuz?
maxschlepzig


5

Sizin için "enter" göndermek için bekleyiş kullanabilirsiniz

cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")

Ancak, eğer / tmp / sshkey dosyası zaten varsa, komutun çıktısı farklı olacağından bunun başarısız olacağını unutmayın.


1
Katkı için teşekkür ederim. Beklenti aynı tür problemler için daha da çok yönlü görünüyor ... aslında senaryo yazımı ve kullanıcı etkileşimi çakışacak olanlar için. Komutunuzu kullanmadan önce / tmp / sshkey dosyasının zaten mevcut olduğunu ve kontrol edip etmediğini kontrol edeceğim.
insanlıkANDpeace

2

Ssh-keygen'den önce basit bir yankı yaptım. Yanisu - <user> -c "echo |ssh-keygen -t rsa"

Bu Redhat 6'da test edildi


Bunun en iyi cevap olduğunu sanmıyorum, ancak ikisinin de oy kullanması için bir neden olmadığını düşünüyorum.
cubuspl42

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.