Beberapa perangkat lunak server SSH mendukung protokol RFC 4819 untuk mengelola kunci SSH yang diotorisasi, tetapi sangat jarang sehingga hampir tidak ada di Linux :(
grawity
3
Pertanyaan yang sangat bagus, ini benar-benar kehilangan fungsionalitas untuk ssh-copy-id untuk memfasilitasi rotasi tombol.
Zabuzzman
1
Perlu dicatat bahwa ssh-keygenmemang memberikan -Ropsi untuk menghapus kunci dari known_hosts, tetapi sayangnya ssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keystidak berfungsi. Saya akan menggunakan sedopsi di bawah ini.
Digital Trauma
Jawaban:
10
Seperti yang disarankan Ignatio, ini bisa dilakukan dengan grep -v.
Berikut adalah contoh yang menghapus kunci yang berisi some unique stringatau hanya menghapus authorized_keysfile ketika tidak ada kunci lain yang tersisa.
if test -f $HOME/.ssh/authorized_keys; then
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then
cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
else
rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
fi;
fi
Ganti some unique stringdengan sesuatu yang hanya ada di kunci yang ingin Anda hapus.
Sebagai oneliner lebih dari ssh ini menjadi
ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; else rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; fi; fi'
Jika Anda hanya menggunakan karakter base64 di file keyfile publik (mis., awk '{print $2}' ~/.ssh/id_rsa.pub), Maka Anda tidak perlu khawatir akan keluar dari karakter khusus apa pun.
Juan
7
Nggak. Anda harus masuk SSH dan menggunakan sedatau grepmenghapus kunci dari file.
Terima kasih. Saya akan membuka pertanyaan sedikit lebih lama untuk melihat apakah seseorang juga dapat memberikan skrip yang berlawanan dengan ssh-copy-id
grm
@ grm: Saya sarankan Anda menjaga pertanyaan tetap terbuka selamanya, atau setidaknya sampai ssh-undo-copy-id diimplementasikan! ;-)
Max L.
0
Phil sudah menjawab pertanyaan ini tetapi saya ingin melakukan penambahan dan membuatnya lebih mudah untuk Anda. Dan karena Anda meminta kebalikan dari ssh-copy-id, saya berasumsi Anda ingin menjalankannya di mesin resmi.
kunci ssh hanya berisi karakter base64 . Jadi Anda bisa menggunakan pembatas sebagai sed yang tidak ada dalam daftar itu. Mari kita gunakan '#'.
'Komentar' di kunci pub mungkin tidak memiliki karakter base64. Jika memiliki "#", contoh Anda rusak. Mungkin digunakan awk '{print $2}' ~/.ssh/id_rsa.pubdengan beberapa sedatau grep -vsebagai gantinya.
ssh-keygen
memang memberikan-R
opsi untuk menghapus kunci dariknown_hosts
, tetapi sayangnyassh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keys
tidak berfungsi. Saya akan menggunakansed
opsi di bawah ini.Jawaban:
Seperti yang disarankan Ignatio, ini bisa dilakukan dengan
grep -v
.Berikut adalah contoh yang menghapus kunci yang berisi
some unique string
atau hanya menghapusauthorized_keys
file ketika tidak ada kunci lain yang tersisa.Ganti
some unique string
dengan sesuatu yang hanya ada di kunci yang ingin Anda hapus.Sebagai oneliner lebih dari ssh ini menjadi
Diuji pada Linux (SLES) dan HP-UX.
sumber
sed
lebih baik dalam melakukan inised
memberikan solusi yang kompak:Ini akan menyimpan aslinya
authorized_keys
dalamauthorized_keys.bak
. Jika Anda tidak ingin cadangan kemudian hanya mengubah-i.bak
ke-i
.Anda bahkan dapat menghapus beberapa kunci:
Satu-satunya hal yang sulit di sini adalah karakter khusus di regex yang perlu diloloskan .
sumber
awk '{print $2}' ~/.ssh/id_rsa.pub
), Maka Anda tidak perlu khawatir akan keluar dari karakter khusus apa pun.Nggak. Anda harus masuk SSH dan menggunakan
sed
ataugrep
menghapus kunci dari file.sumber
Phil sudah menjawab pertanyaan ini tetapi saya ingin melakukan penambahan dan membuatnya lebih mudah untuk Anda. Dan karena Anda meminta kebalikan dari ssh-copy-id, saya berasumsi Anda ingin menjalankannya di mesin resmi.
kunci ssh hanya berisi karakter base64 . Jadi Anda bisa menggunakan pembatas sebagai sed yang tidak ada dalam daftar itu. Mari kita gunakan '#'.
Ganti hostname dengan IP server.
Opsi PasswordAuthentication akan menyebabkan ssh gagal jika meminta kata sandi
sumber
awk '{print $2}' ~/.ssh/id_rsa.pub
dengan beberapased
ataugrep -v
sebagai gantinya.