Mengotomatiskan ssh-keygen -t rsa sehingga tidak meminta frasa sandi

164

Saya perlu mengotomatiskan ssh-keygen -t rsatanpa kata sandi yaitu masuk saat diminta.
Bagaimana saya bisa melakukannya dari skrip shell?

Tampa
sumber

Jawaban:

230

Untuk menghasilkan keypair SSH tanpa diminta frasa sandi, Anda dapat melakukan hal berikut:

$ ssh-keygen -f id_rsa -t rsa -N ''
Shamoon
sumber
2
Bekerja untukku! Github selalu meminta kata sandi tanpa opsi -N bahkan ketika tidak memasukkan passwort setelah promt "Masukkan frasa sandi (kosongkan tanpa frasa sandi)"
Hollerweger
4
Pada RHEL 6, saya mendapatkan kesalahan ini: " ssh-keygen: option requires an argument -- N" :(
Anthony O.
1
OK ini karena saya menggunakan dzdoperintah di depannya, jadi saya harus menulis:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Anthony O.
1
Tampaknya ruang yang memisahkan opsi dan frasa sandi kosong -N ''adalah signifikan. Ketika saya menambahkan ruang itu berhasil!
GH05T
33

Jika Anda perlu melakukan ini dari PowerShell di windows gunakan:

ssh-keygen -f $Name -t rsa -N '""'

perhatikan Anda juga harus memastikan direktori git bin ada di jalur Anda:

$sshPath = "<path>\git\bin\"

$env:path += ";$sshPath"

Kemudian untuk menggunakannya di PoshGit hanya saja:

Add-SshKey "<path>\.shh\KeyFilename"
Daniel Little
sumber
Terima kasih untuk ini. BTW, git\usr\binadalah dir yang benar.
majkinetor
4
Ini tidak berhasil untuk saya. Saya mendapatkan kesalahan "Kunci penyimpanan" mykey "gagal: frasa sandi terlalu pendek (minimum empat karakter)". Saya harus mengganti tanda kutip ganda / tunggal, mis ssh-keygen -f $Name -t rsq -N '""'.
Aaron Jensen
1
@AaronJensen sama untukku. Terima kasih untuk perbaikannya. Saya menggunakan'""'
Trevor Sullivan
@AaronJensen Terima kasih! '""'adalah satu-satunya varian yang bekerja untuk saya.
Somnium
@ Daniel-Little Saya tidak dapat menemukan modul PoshGit, satu-satunya yang saya temukan dengan nama ini adalah posh-git yang sepertinya tidak memiliki cmdlet ini. Ada info lebih lanjut tentang itu?
Jim
18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
GMaster
sumber
Jawaban ini pada dasarnya adalah salin dan tempel dari jawaban oleh Shamoon
oᴉɹǝɥɔ
@ oᴉɹǝɥɔ Jawaban oleh Shamoon tidak secara eksplisit menentukan jalur ke kunci pribadi.
GMaster
11

Hanya koreksi untuk menjawab 2 ... Saya menemukan pada sistem OL dan RHEL saya nama file harus id_rsa bukan id.rsa.

Jadi pada sistem OL atau RHEL perintahnya adalah:

$ ssh-keygen -f id_rsa -t rsa -N ''
ASHU
sumber
2
Sejauh yang saya mengerti id_rsaadalah nama file default untuk kunci RSA, jadi jika Anda ingin tetap menggunakan default, Anda tidak dipaksa untuk secara eksplisit menggunakan -fopsi.
danidemi
3
@danidemi ketika Anda benar bahwa itu adalah default, salah satu alasan untuk menentukan -fopsi adalah agar Anda dapat menjalankan ini dalam skrip. Anda bisa menegaskan kembali default untuk menonaktifkan prompt berikutnya.
Tristan Reid
9

Bagaimana dengan :

ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ''

Sebagaimana dicatat dalam man ssh-keygen:

SYNOPSIS
     ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
(...)
      -q      Silence ssh-keygen.

(yaitu dengan openssh-clientpaket di Debian 9.4 peregangan: OpenSSH_6.7p1 Debian-5+deb8u4)

Manumie
sumber
Bekerja untuk saya, terima kasih. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
David Webster
0

Saya perlu mengotomatiskan dalam bash script perintah ssh-keygen dan jawaban akhir yang bekerja dengan baik untuk saya:

echo -e "\n" | ssh-keygen -N "" &> /dev/null

Perintah echo dengan -e mengartikan "\ n" sebagai kunci Enter, tetapi tidak bekerja dengan frasa sandi. Kemudian menggunakan opsi -N "" (kata sandi kosong) kata sandi akan kosong dan tidak akan meminta apa pun. &> / dev / null akan mengirim 'stdout' dan 'stderr' ke / dev / null sehingga tidak ada yang dicetak melalui layar.

mponceantolin
sumber
0
$ printf '\n' | ssh-keygen -N ''
Yang Young
sumber