SSH Tiba-tiba mengembalikan format tidak valid

23

Jadi beberapa waktu yang lalu saya mengatur server pada AWS, dan menggunakan kunci SSH yang dihasilkan. Saya menyimpan kunci ke Lastpass, dan telah berhasil mengambilnya dari sana sebelumnya, dan membuatnya berfungsi. Namun, setelah mencobanya lagi hari ini, saya tidak bisa membuatnya bekerja.

-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name

Saya sudah mencoba ssh -i key_name, ssh-keygen -f key_nametetapi tidak ada yang berhasil, saya selalu mendapatkan pesan kesalahan ini:

Load key "key_name": invalid format

Apakah ada cara untuk memperbaikinya?

Gregor Menih
sumber

Jawaban:

13

Periksa isi key_name, jika agen mengatakan invalid format, maka ada yang salah dengan kunci - seperti .. apakah Anda yakin itu kunci yang benar? Bahkan jika itu bukan kunci pribadi yang Anda butuhkan, agen ssh tidak akan kembali invalid formatjika kunci itu berfungsi, Anda tidak akan dapat terhubung. Anda mungkin telah meletakkan kunci publik di sana, untuk beberapa alasan. Periksa!

13ditarik
sumber
5
Sudah diperiksa. Mulai dengan ----BEGIN RSA PRIVATE KEY-----dan diakhiri dengan -----END RSA PRIVATE KEY-----. Plus itu dulu berfungsi.
Gregor Menih
2
Yang sangat tidak mungkin, tetapi masih mungkin, adalah file tersebut rusak. Buat yang baru dan isi lagi konten dari lastpass.
13dimitar
2
Wow, itu benar-benar membantu! Setelah membuat kunci baru, saya perhatikan bahwa kunci baru memiliki 64 karakter per baris sedangkan kunci lama saya memiliki 76. Saya memformat ulang kunci lama saya untuk hanya memiliki 64 karakter per baris, kemudian mulai bekerja! Saya juga kehilangan satu tanda hubung dari baris pertama.
Gregor Menih
2
"Aku juga kehilangan satu tanda hubung dari baris pertama." Dito. Terima kasih @ItsGreg untuk itu. Saya sangat merindukan karakter pertama ketika memilih dan menyalin di antara terminal!
Starfry
15

Apa yang saya lakukan untuk memperbaiki masalah ini adalah yang saya gunakan untuk mengonversi file PPK menggunakan PuttyGen.

Pertama memuat urkey.PPK, lalu pada menu konversi, klik ekspor ke format file openssh. Ini akan membuat file kunci baru.

sekarang, ssh -i "newkey" [email protected]

Selesai Semoga ini bisa membantu.

Ras
sumber
4

Saya meminta openssh untuk menggunakan file identitas tertentu dengan menetapkannya dalam file .ssh / config.

Konfigurasi kerja asli telah

IdentityFile = <path to public key file> 

Ini berhenti berfungsi tanpa perubahan. Dengan sedikit berpikir saya mengganti "path ke file kunci publik" di atas dengan "path ke file kunci pribadi". Itu berhasil. Alasannya adalah bahwa file kunci publik dan pribadi memiliki nomor terkait peudoprime besar sesuai algoritma RSA. Jika Anda mengganti file kunci pribadi dengan file kunci publik, angka-angka kriptografis ini tidak akan diekstraksi dengan benar dari blok base64 yang disimpan dalam file-file kunci. Tampaknya beberapa versi ssh dapat mengetahui ekstensi .pub dan menggunakannya untuk mengidentifikasi file kunci pribadi yang benar - dan versi lain tidak melakukannya. Ini adalah cara lain kesalahan ini bisa terjadi. Semoga ini bisa membantu seseorang.

vpathak
sumber
Dalam kasus saya, saya punya configfile setup dengan path_to_public_keydan semuanya berfungsi. Namun ketika mac melakukan restart keras dan beberapa hari kemudian saya mencoba melakukan git push, saya mulai mendapatkan kesalahan yang disebutkan di atas. Tetapi ketika saya sekarang mengubahnya ke path_to_private_keyhal-hal yang bekerja ... Hmmm. Tidak yakin mengapa ..
lukik
3

Saya memiliki masalah yang sama, dan ternyata saya memiliki pemisah baris Windows-style (CRLF) dalam file untuk beberapa alasan.

Selain itu, file harus diakhiri dengan LF tunggal.

Memperbaiki hal-hal yang dibuat pesolek lagi.

AKX
sumber
Mengejutkan bahwa LF akhir itu sangat diperlukan, tetapi memang sebagian masalahnya, dengan bagian lainnya adalah saya membuat file di Windows dan melakukan hal itu memberikan jeda baris CRLF. Untuk referensi orang lain, dos2unixadalah perintah untuk mengkonversi dari jeda baris CRLF (Windows-style) ke LF (Linux-style).
Hashim
1

Anda harus mengonversi kunci .ppk Anda menjadi kunci OpenSSH

Inilah cara Anda melakukannya :

  1. Unduh PuttyGen dan hasilkan keypair Anda (jika Anda belum siap keypair). Simpan kunci pribadi ke folder Anda (.ppk)
  2. Jika Anda sudah memiliki kunci pribadi, muat file kunci pribadi (.ppk) dengan menekan tombol "Muat". Kalau tidak, lewati langkah ini
  3. Di bawah menu "Konversi", pilih kunci Ekspor OpenSSH kemudian simpan ke folder Anda
  4. Sekarang Anda siap untuk menggunakan kunci untuk login server Anda tanpa mengetik kata sandi (Saya berasumsi Anda sudah meletakkan kunci publik di bawah /root/.ssh/authorized_keys, chmod 600 /root/.ssh/authorized_keys, Dan Restart SSH demon)
Dylan B
sumber
1

Saya baru saja menemukan ini hari ini ketika sedang menulis beberapa alat penandaan git untuk pipa CI saya.

Inilah perbedaan antara dua kunci saya:

$ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
27c27
< -----END OPENSSH PRIVATE KEY-----
---
> -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file

Saya mengubah kode saya seperti ini:

     with open(ssh_key_file, 'w') as skf:
-        skf.write(ssh_key)
+        skf.write(ssh_key + '\n')

Dan sekarang kunci ssh saya berfungsi.

TL; DR - Saya kira Anda harus memiliki baris baru di akhir kunci pribadi Anda.

Robert J
sumber
1

Dalam kasus saya, ternyata saya memiliki baris baru antara "header" awal / akhir dan data utama:

-----BEGIN RSA PRIVATE KEY-----

- Key data here -

-----END RSA PRIVATE KEY-----

Menghapus baris baru ekstra, jadi itu menjadi

-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----

memecahkan masalah saya.

pengguna50849
sumber
0

Gunakan kunci pribadi Anda, bukan kunci publik.

Richard
sumber
solusi yang sama dengan jawaban saya - di mana penjelasan juga ditambahkan
vpathak
0

Saya mempunyai masalah ini karena saya mempunyai kunci di ~ / .ssh yang sebenarnya adalah format yang tidak benar dan saya punya banyak kunci, yang berarti SSH sedang mencoba semuanya, walaupun saya menentukan file identitas saya di perintah. Kebetulan gagal karena hanya bisa mencoba 5 kunci yang saya pikir, dan kemudian meninggalkan saya dengan kesalahan itu, yang sah, hanya untuk file identitas yang salah. Solusinya adalah dengan menggunakan IdentitiesOnly yes~ ~ .ssh / config saya.

Elijah Lynn
sumber
0

Saya memiliki kesalahan ini karena ada baris kosong di awal file kunci. Mudah dilewatkan jika Anda catmengeluarkannya.

Elijah Lynn
sumber
0

Ini juga merupakan kesalahan ssh (setidaknya beberapa versi) yang dipancarkan jika Anda memiliki frasa sandi pada kunci pribadi Anda, dan memasukkan frasa sandi yang salah ketika Anda mencoba menghubungkan.

(Secara khusus, ini terjadi pada saya dengan: OpenSSH_7.6p1, LibreSSL 2.6.2, yang merupakan SSH bawaan untuk Mac OS X 10.13.6.)

Jadi periksa kembali apakah Anda menggunakan frasa sandi yang benar, dan CAPS LOCK tidak aktif.

pengguna ssh di os x
sumber
-2

Pastikan Anda mengganti nama kunci PRIVATE Anda dan menghapus ekstensi file yang menjadi masalah.

Langkah yang saya ambil

Buat kunci publik Anda:

Pastikan Anda berada di direktori yang sama dengan kunci privat Anda

Cara membuat Kunci Publik:

ssh-keygen -y -f Private-Key.pem > Public-key.pub

pastikan kunci PUBLIC memiliki ekstensi file .pub

setelah itu berikan izin yang layak untuk alasan keamanan:

chmod 600 Private-Key.pem
chmod 400 Public-key.pub

LALU bagian terpenting dan alasan Anda mendapat kesalahan "format tidak valid"

Pastikan Anda mengganti nama kunci PRIVATE Anda dan menghapus ekstensi file:

Hapus .pem dari kunci pribadi Anda.

mv Private-Key.pem Private-Key

atau jika pada komputer windows ganti nama kunci pribadi, nama yang sama hanya menghapus .pem

SICKFREDO
sumber