Bagaimana cara menghapus frasa sandi untuk kunci SSH tanpa harus membuat kunci baru?

1034

Saya menetapkan frasa sandi saat membuat kunci SSH baru di laptop saya. Tapi, seperti yang saya sadari sekarang, ini cukup menyakitkan ketika Anda mencoba untuk melakukan ( Git dan SVN ) ke lokasi terpencil selama SSH berkali-kali dalam satu jam.

Satu cara yang bisa saya pikirkan adalah, hapus kunci SSH saya dan buat yang baru. Apakah ada cara untuk menghapus frasa sandi, sambil tetap menyimpan kunci yang sama?

btbytes
sumber
9
Saya pikir jawaban yang ketat sebenarnya adalah tanggapan Torsten Marek. Trik ssh-agent mungkin adalah apa yang Anda cari, tetapi ini merupakan jawaban untuk pertanyaan yang berbeda.
tardate
1
Frasa sandi bukan hanya kunci untuk membuka kunci SSH pribadi, tetapi bagian dari mekanisme enkripsi. Satu bagian adalah kunci SSH Anda, yang lain - frasa sandi yang dimasukkan secara manual. Hanya jika kedua bagian sudah benar kunci komposit yang dihasilkan dari mereka on the fly akan valid. Jadi, frasa sandi lainnya sesuai dengan kunci SSH lainnya (dan tidak ada frasa sandi adalah kasus khusus "frasa sandi lain").
Paul
97
Menutup pertanyaan seperti itu seperti memperdebatkan apakah efek samping dalam bahasa pemrograman harus diizinkan karena 'murni' atau tidak. Para puritan selalu mengamuk, sementara yang lain tidak peduli karena itu fitur yang membantu dan membuat hidup lebih mudah. ssh diperlukan, walaupun sulit tidak terkait pemrograman ... jangan tutup pertanyaan seperti itu. : |
sjas

Jawaban:

1933

Jawaban singkat:

$ ssh-keygen -p

Ini kemudian akan meminta Anda untuk memasukkan lokasi keyfile, frasa sandi lama, dan frasa sandi baru (yang dapat dibiarkan kosong untuk tidak memiliki frasa sandi).


Jika Anda ingin melakukan semuanya pada satu baris tanpa diminta, lakukan:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Penting: Berhati-hatilah bahwa ketika menjalankan perintah biasanya akan dicatat dalam ~/.bash_historyfile Anda (atau serupa) dalam teks biasa termasuk semua argumen yang disediakan (yaitu frasa sandi dalam kasus ini). Oleh karena itu, disarankan agar Anda menggunakan opsi pertama kecuali Anda memiliki alasan khusus untuk melakukan sebaliknya.

Perhatikan bahwa Anda masih dapat menggunakan -f keyfiletanpa harus menentukan -Pjuga -N, dan bahwa keyfile default untuk ~/.ssh/id_rsa, jadi dalam banyak kasus, itu bahkan tidak diperlukan.

Anda mungkin ingin mempertimbangkan untuk menggunakan ssh-agent, yang dapat men-cache passphrase untuk sementara waktu. Versi terbaru gpg-agent juga mendukung protokol yang digunakan oleh ssh-agent.

Torsten Marek
sumber
464
Secara eksplisit: Anda bisa menjalankannya ssh-keygen -pdi terminal. Ini kemudian akan meminta Anda untuk keyfile (default ke file yang benar untuk saya, ~/.ssh/id_rsa), frasa sandi lama (masukkan apa yang Anda miliki sekarang) dan frasa sandi baru (masukkan apa-apa).
Henrik N
34
Ex. :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK
24
-1 untuk membuat pengguna mengetikkan kata sandi di terminal dan membuatnya dapat diakses ~/.bash_history. Lebih baik mengetik:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres
5
Kalian harus mencatat bahwa jika Anda memasukkan perintah ke shell memulai ruang (putih) yang perintahnya tidak direkam ke ~/.bash_hstoryIe. gunakan `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` dan Anda baik-baik saja (kecuali Anda memiliki keylogger lain di sana). Anda juga bisa menyingkirkan catatan dari sejarah ..
Huge
14
Mungkin perlu menambahkan baris yang mengatakan bahwa ini akan menimpa file yang ada dan tidak meminta lokasi baru.
Lars Francke
46

$ ssh-keygen -p bekerja untukku

Membuka git bash. Ditempel:$ ssh-keygen -p

Tekan enter untuk lokasi default.

Masukkan frasa sandi lama

Masukkan frasa sandi baru - BLANK

Konfirmasikan frasa sandi baru - BLANK

BOOM, rasa sakit saat memasukkan frasa sandi untuk git push sudah hilang.

Terima kasih!

Karan
sumber
Jika ketika Anda menekan enter untuk $ ssh-keygen -pdan kunci Anda tidak di lokasi default katakan (/ Pengguna / nama jurnal / .ssh/id_rsa), Anda dapat merespons dengan menempatkan /Users/yourname/.ssh/yourkeyketika diminta
Chigozie Orunta
37

Anda mungkin ingin menambahkan yang berikut ini ke .bash_profile Anda (atau yang setara), yang memulai ssh-agent saat masuk.

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

Pada beberapa distro Linux (Ubuntu, Debian) Anda dapat menggunakan:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

Ini akan menyalin id yang dihasilkan ke mesin jarak jauh dan menambahkannya ke gantungan kunci jarak jauh.

Anda dapat membaca lebih lanjut di sini dan di sini .

mlambie
sumber
7
Tidakkah distribusi modern memulai ssh-agent di luar kotak?
Troels Arvin
Pada beberapa distro Linux (Ubuntu, Debian) Anda dapat menggunakan: ssh-copy-id -i ~ / .ssh / id_dsa.pub username @ host Dengan anggapan tentu saja Anda memiliki akses seperti itu. Dan meskipun ini dari tahun 2008 mungkin harus diedit untuk merujuk ke id_rsa.pub (ya saya bisa mengeditnya tapi saya tidak merasa nyaman melakukan itu untuk karya orang lain - dan terutama untuk hal seperti ini).
Pryftan
@TroelsArvin Ya. Tapi otoh ada saat-saat di mana ia terbunuh (meskipun keadaan yang saya temui tidak terlintas dalam pikiran - kecuali mungkin X11 memiliki masalah dan Anda harus me-restart itu ... itu mungkin salah satu contohnya). Dalam hal ini Anda harus 'membuatnya ulang'.
Pryftan
8

Untuk mengubah atau menghapus frasa sandi, saya sering merasa paling mudah untuk hanya memasukkan tanda pdan ftanda, lalu biarkan sistem meminta saya untuk memberikan frasa sandi:

ssh-keygen -p -f <name-of-private-key>

Contohnya:

ssh-keygen -p -f id_rsa

Masukkan kata sandi kosong jika Anda ingin menghapus frasa sandi.

Contoh dijalankan untuk menghapus atau mengubah kata sandi terlihat seperti ini:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Saat menambahkan frasa sandi ke kunci yang tidak memiliki frasa sandi, prosesnya terlihat seperti ini:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
ccalvert
sumber
3

Di windows, Anda dapat menggunakan PuttyGen untuk memuat file kunci pribadi, menghapus frasa sandi dan kemudian menimpa file kunci pribadi yang ada.

Ajit Goel
sumber
2

Di Mac, Anda dapat menyimpan frasa sandi untuk kunci ssh pribadi di Gantungan Kunci Anda, yang membuatnya transparan. Jika Anda login, itu tersedia, ketika Anda logout, pengguna root Anda tidak dapat menggunakannya. Menghapus frasa sandi adalah ide yang buruk karena siapa pun yang memiliki file dapat menggunakannya.

ssh-keygen -K

Tambahkan ini ke ~/.ssh/config

UseKeychain yes
bbaassssiiee
sumber