Baru-baru ini saya tidak dapat mengkloning atau mendorong ke github, dan saya mencoba untuk menemukan akar masalahnya.
Ini ada di windows
Saya memiliki cygwin + git dan juga msysgit.
Msysgit diinstal dengan opsi berikut:
- OpenSSH
- Gunakan Git dari Windows Command Prompt
Itu memberi saya 4 lingkungan untuk mencoba menggunakan git di:
- Windows cmd prompt
- Powershell
- Git Bash
- Cygwin
Entah bagaimana saya telah berhasil menempatkan diri pada posisi di mana ketika saya mencoba mengkloning repositori menggunakan msysgit, cmd.exe, atau Powershell, saya mendapatkan kesalahan berikut:
> Initialized empty Git repository in
> C:/sandbox/SomeProject/.git/
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions 0644 for
> '/c/Users/Ben/.ssh/id_rsa' are too
> open. It is recommended that your
> private key files are NOT accessible
> by others. This private key will be
> ignored. bad permissions: ignore key:
> /c/Users/Ben/.ssh/id_rsa Permission
> denied (publickey). fatal: The remote
> end hung up unexpectedly
Ini menggunakan folder .ssh di folder c: \ users \ ben \, yang digunakan oleh msysgit. Saya menduga cygwin berfungsi karena folder .ssh terletak di tempat lain, tetapi saya tidak yakin mengapa
Di Git Bash, saya memeriksa izin:
$ ls -l -a ~/.ssh
Yang memberi saya:
drwxr-xr-x 2 Ben Administ 0 Oct 12 13:09 .
drwxr-xr-x 34 Ben Administ 8192 Oct 12 13:15 ..
-rw-r--r-- 1 Ben Administ 1743 Oct 12 12:36 id_rsa
-rw-r--r-- 1 Ben Administ 399 Oct 12 12:36 id_rsa.pub
-rw-r--r-- 1 Ben Administ 407 Oct 12 13:09 known_hosts
Izin ini tampaknya terlalu santai. Bagaimana mereka bisa seperti ini, saya tidak tahu.
Saya dapat mencoba mengubahnya ...
$ chmod -v -R 600 ~/.ssh
yang memberitahu saya:
mode of `.ssh' changed to 0600 (rw-------)
mode of `.ssh/id_rsa' changed to 0600 (rw-------)
mode of `.ssh/id_rsa.pub' changed to 0600 (rw-------)
mode of `.ssh/known_hosts' changed to 0600 (rw-------)
Tetapi tampaknya tidak berpengaruh. Saya masih mendapatkan kesalahan yang sama, dan melakukan
$ ls -l -a ~/.ssh
menghasilkan izin yang sama seperti sebelumnya.
MEMPERBARUI:
Saya mencoba untuk memperbaiki izin untuk file-file di cygwin, dan cygwin melaporkan izin mereka dengan benar, gitbash tidak: alt text http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg
Ada ide tentang bagaimana saya benar-benar dapat memperbaiki izin ini?
Jawaban:
Anda mengubah izin di seluruh direktori, yang saya setujui dengan Splash adalah ide yang buruk. Jika Anda dapat mengingat apa izin asli untuk direktori tersebut, saya akan mencoba mengaturnya kembali lalu melakukan yang berikut
di dalam folder .ssh. Itu akan mengatur file id_rsa ke rwx (baca, tulis, jalankan) hanya untuk pemilik (Anda), dan nol akses untuk semua orang.
Jika Anda tidak dapat mengingat apa pengaturan aslinya, tambahkan pengguna baru dan buat satu set kunci SSH untuk pengguna itu, sehingga membuat folder .ssh baru yang akan memiliki izin default. Anda dapat menggunakan folder .ssh baru sebagai referensi untuk izin untuk mengatur ulang folder dan file .ssh Anda.
Jika itu tidak berhasil, saya akan mencoba melakukan uninstall msysgit, menghapus SEMUA folder .ssh di komputer (hanya untuk ukuran yang aman), kemudian menginstal ulang msysgit dengan pengaturan yang Anda inginkan dan coba mulai lagi dari awal (walaupun saya pikir Anda memberi tahu saya Anda sudah mencoba ini).
Diedit: Juga baru saja menemukan tautan ini melalui Google - Memperbaiki "PERINGATAN: FILE KUNCI PRIVATE YANG TIDAK DIPROTEKSI!" di Linux Sementara itu ditargetkan di linux, itu mungkin membantu karena kita berbicara izin liunx dan semacamnya.
sumber
-rwx------
. Jadi apa yang Anda tampilkan tidak benar jika Anda telah melakukan perintah chmod dengan benar.Ada bug dengan chmod cygwin, silakan merujuk ke:
/superuser/397288/using-cygwin-in-windows-8-chmod-600-does-not-work-as-expected
sumber
None
. (Saya kira ini adalah prosedur standar ketika sebuah grup belum didefinisikan secara eksplisit). Perubahan ini menjadi grup eksplisit yangUsers
seharusnya memungkinkan cygwin untuk memisahkan izin, dan saya akhirnya dapat menetapkan 600 alih-alih 660 otomatis.chmod 600
git akan mengeluh bahwa izin saya masih0660
. Memperbaiki kepemilikan grup membuat chown berlaku dengan benar.Untuk sistem * nix, perbaikan yang jelas adalah
chmod 600 id_rsa
ofc, tetapi pada windows 7 saya harus membenturkan kepala ke dinding untuk sementara waktu, tetapi kemudian saya menemukan solusi ajaib:pergi ke Komputer Saya / Klik Kanan / Properti / Pengaturan Sistem Lanjut / Variabel Lingkungan dan HAPUS variabel (mungkin dari lingkungan sistem dan pengguna):
CYGWIN
Pada dasarnya, ini cacat pada mingw32 yang digunakan oleh git windows binary, selalu melihat semua file 644 dan semua folder. Menghapus variabel lingkungan tidak mengubah perilaku itu, tetapi tampaknya memberitahu ssh.exe untuk mengabaikan masalah tersebut. Jika Anda memang mengatur izin yang tepat untuk id_rsa Anda melalui pengaturan keamanan penjelajah (benar-benar tidak perlu memiliki pengguna lain di sana selain Anda sendiri, bukan "semua orang", bukan "administrator", bukan "administrator", bukan "sistem". Tidak ada, hanya Anda) , kamu akan tetap aman.
Sekarang, mengapa MingW32, sistem yang berbeda dari cygwin, akan membuat setiap penggunaan variabel lingkungan Cygwin, adalah di luar saya. Tampak seperti bug bagi saya.
sumber
Saya menggunakan XP dan ini memungkinkan Git Bash untuk berkomunikasi dengan Github (setelah frustrasi):
c:\cygwin\bin\cyg*
(~ 50 file) kec:\Program Files\Git\bin\
c:\cygwin\bin\ssh.exe
kec:\Program Files\Git\bin\
(menimpa)Buat file yang
c:\Documents and Settings\<username>\.ssh\config
berisi:(opsional) Gunakan
ssh -v git@github
untuk melihat koneksi debugged.Latar Belakang: Masalah umum adalah kombinasi dari keduanya:
sumber
c:\Documents and Settings\<username>\.ssh\config
karena Anda telah digantic:\Program Files\Git\bin\ssh.exe
denganc:\cygwin\bin\ssh.exe
. Baik ?LogLevel DEBUG
ke file .ssh \ config untuk mendapatkan hasil debug dari proses ssh.exe yang dimulai oleh git.exe.Untuk Windows 7 menggunakan Git yang ditemukan di sini (menggunakan MinGW, bukan Cygwin):
sumber
OK jadi di sini adalah bagaimana saya benar-benar memaksa perubahan pada file Windows saya mengenai izin itu sendiri di Win7: Temukan kunci ssh Anda di windows explorer: C: \ Users [your_user_name_here] .ssh \ id_rsa
Klik kanan pada file> Properti> tab Keamanan> Tombol Tingkat Lanjut> Ubah izin
Sekarang hapus semua orang yang sebenarnya bukan nama pengguna Anda. Ini termasuk pengguna Administrator dan Sistem. Pada titik ini Anda mungkin mendapatkan dialog tentang mewarisi izin - pilih opsi yang TIDAK DIwarisi- karena kami hanya ingin mengubah file ini.
Klik OK dan simpan sampai selesai.
Saya berjuang dengan ini selama berhari-hari karena windows saya tidak akan mengubah izin file dari baris perintah. Dengan cara ini, ini SEBENARNYA dilakukan - alih-alih menggunakan pekerjaan yang mengasyikkan yang membuat konsekuensi yang aneh.
sumber
Mengubah izin file dari Properti, menonaktifkan warisan dan menjalankan chmod 400 tidak berhasil untuk saya. Izin untuk file kunci pribadi saya adalah:
Kemudian saya perhatikan bahwa grup tersebut adalah None, jadi saya hanya berlari
Lalu saya bisa berhasil mengubah izin dengan chmod 400, dan menjalankan git push.
sumber
UNTUK PENGGUNA MAC:
Ubah pengaturan file pasangan kunci Anda dengan mengetik ini di terminal:
(pastikan Anda berada di direktori yang benar, atau path nama file dalam perintah dengan benar).
sumber
Saya menyelesaikannya dengan menjalankan:
Saya berharap bisa membantu. Semoga berhasil.
sumber
Setelah mengatasi masalah baru-baru ini dan ini menjadi salah satu hasil google teratas saya pikir saya akan ikut serta dengan pekerjaan sederhana yang didokumentasikan dalam diskusi di sini: http://code.google.com/p/msysgit/issues/detail?id = 261 # c40
Cukup melibatkan menimpa mysys ssh.exe dengan cygwin ssh.exe Anda
sumber
Saya memiliki masalah yang sama pada Windows XP baru-baru ini. Saya mencoba chmod 700 pada file ~ / .ssh / id_rsa saya tetapi sepertinya tidak berhasil. Ketika saya melihat izin menggunakan ls-l pada ~ / .ssh / id_rsa saya bisa melihat bahwa izin efektif saya masih 644.
Lalu saya ingat bahwa izin windows juga mewarisi izin dari folder, dan folder itu masih terbuka untuk semua orang. Sebuah solusi bisa dengan mengatur izin untuk folder juga, tapi saya pikir cara yang lebih baik adalah dengan memberitahu sistem untuk mengabaikan warisan untuk file ini. Ini dapat dilakukan dengan menggunakan opsi lanjutan pada tab keamanan di properti file, dan menghapus centang "mewarisi dari izin orang tua ..."
Ini mungkin bermanfaat bagi orang lain dengan masalah yang sama.
sumber
Saya bermain sekarang dengan Git 1.6.5, dan saya tidak bisa meniru pengaturan Anda:
chmod juga tidak mengubah izin file untuk kunci saya.
Lingkungan Hidup:
Pembaruan: Git 1.6.5.1 juga berfungsi.
sumber
Ini adalah masalah yang terutama terlibat pada Windows, di mana tidak cukup hanya chmod file dengan benar. Anda harus mengatur lingkungan Anda.
Di Windows, ini berhasil bagi saya:
Instal cygwin.
Ganti ssh.exe msysgit dengan ssh.exe cygwin.
Menggunakan cygwin bash, chmod 600 file kunci pribadi, yang merupakan "id_rsa" untuk saya.
Jika masih tidak berfungsi, buka Control Panel -> System Properties -> Advanced -> Variabel Lingkungan dan tambahkan variabel lingkungan berikut. Kemudian ulangi langkah 3.
Nilai Variabel
CYGWIN sbmntsec
sumber
Saya dapat memperbaiki ini dengan melakukan dua hal, meskipun Anda mungkin tidak perlu melakukan langkah 1.
salin dari cygwin ssh.exe dan semua cyg * .dll ke direktori bin Git (ini mungkin tidak diperlukan tetapi ini adalah langkah yang saya ambil tetapi ini saja tidak memperbaiki keadaan)
ikuti langkah-langkah dari: http://zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/
Saya menambahkan beberapa detail ke file ~ / .ssh / config saya:
Host heroku.com
Hostname heroku.com
Port 22
IdentitiesHanya ya
IdentityFile ~ / .ssh / id_heroku
TCPKeepAlive yes
Pengguna brandon
Saya harus menggunakan Pengguna sebagai alamat email saya untuk heroku.com Catatan: ini berarti Anda harus membuat kunci, saya mengikuti ini untuk membuat kunci dan ketika diminta untuk nama kunci, pastikan untuk menentukan id_heroku http: / /help.github.com/win-set-up-git/
heroku: tambahkan ~ / .ssh / id_heroku.pub
sumber
Apa yang melakukan trik untuk saya adalah untuk memperbarui CygWin variabel lingkungan dengan: " tty nodosfilewarning ". Bahkan tidak perlu chmod kunci.
sumber
Bukan jawaban langsung untuk pertanyaan utama, tetapi pada pertanyaan Anda tentang cara kerja folder cygwin ... Sebagai aturan umum, cygwin menempatkan semua file "Anda" di bawah equiv c: \ cygwin \ home \ username. Ini memperlakukan folder itu untuk pengaturan spesifik pengguna apa pun alih-alih direktori pengguna Windows.
sumber
Kecuali ada alasan bahwa Anda ingin mempertahankan pasangan kunci privat / publik (id_rsa / id_rsa.pub), atau menikmati membenturkan kepala Anda di dinding, saya akan merekomendasikan hanya membuat ulang mereka dan memperbarui kunci publik Anda di github.
Mulailah dengan membuat salinan cadangan dari direktori ~ / .ssh Anda.
Masukkan yang berikut ini dan jawab "y" apakah Anda ingin menulis lebih dari file yang ada.
Salin konten kunci publik ke papan klip Anda. (Di bawah ini adalah bagaimana Anda harus melakukannya di Mac).
Buka akun Anda di github dan tambahkan kunci ini.
Keluar dari terminal Anda dan mulai kembali yang baru.
Jika Anda mendapatkan pesan kesalahan yang tidak masuk akal seperti "Masukkan kata sandi Anda" untuk kunci publik Anda ketika Anda tidak pernah memasukkannya, pertimbangkan teknik memulai kembali ini. Seperti yang Anda lihat di atas, itu tidak rumit.
sumber
Saya tidak pernah berhasil membuat git bekerja sepenuhnya di Powershell. Tetapi di shell bit git saya tidak memiliki masalah terkait izin, dan saya tidak perlu mengatur chmod dll ... Setelah menambahkan ssh ke Github saya sudah bangun dan berjalan.
sumber
Ketik terminal:
Dan coba lagi.
sumber
Apakah Anda menyalin file kunci dari komputer lain?
Saya baru saja membuat
id_rsa
file di mesin klien kemudian menempelkan kunci yang saya inginkan. Tidak ada masalah izin. Tidak ada yang diatur. Itu hanya berhasil. Ini juga berfungsi jika Anda menggunakan PuTTYgen untuk membuat kunci pribadi.Mungkin ada masalah grup tersembunyi jika Anda menyalinnya dari komputer lain.
Diuji pada dua mesin Windows 8.1. Menggunakan Sublime Text 3 untuk menyalin dan menempelkan kunci pribadi. Menggunakan Git Bash (Git-1.9.4-preview20140611).
sumber
Setelah memutakhirkan instalasi Cygwin saya ke versi sekitar Februari 2015 (
1.7.34(0.285/5/3) 2015-02-04 12:14 x86_64 Cygwin
), saya tiba-tiba mendapatUNPROTECTED PRIVATE KEY FILE
peringatan.Saya memperbaiki masalah ini setelah menjalankan perintah berikut:
( jawaban lain untuk pertanyaan lain memberi lebih banyak konteks)
sumber
@oby menjawab tidak bekerja untuk saya, jadi saya membuat sedikit perubahan.
Ini berfungsi baik untuk saya di Mac.
sumber
Saya memiliki masalah yang sama pada Windows 10 di mana saya mencoba SSH ke dalam kotak Vagrant. Ini seperti bug dalam versi OpenSSH lama. Apa yang berhasil untuk saya:
(Catat ".exe" jika Anda menggunakan Powershell)
Anda mungkin melihat sesuatu seperti:
Perhatikan bahwa dalam contoh di atas OpenSSH terbaru adalah yang kedua di jalur sehingga tidak akan dijalankan.
Untuk mengubah urutan:
sumber
Sistem saya agak berantakan dengan bash / cygwin / git / msysgit / mungkin-lebih ...
chmod
tidak berpengaruh pada kunci, atauconfig
file.Kemudian saya memutuskan untuk mendekatinya dari Windows, yang berhasil.
Properties
.Security
tab.Advanced
dekat bagian bawah.Change
, di sebelahOwner
dekat bagian atas.Check Names
, laluOK
.Permission entries:
, sorot setiap pengguna yang bukan "My-Awesome-Username", dan pilihRemove
. Ulangi ini sampai "My-Awesome-Username" adalah satu-satunya yang tersisa.Edit
bawah ini.Type:
di bagian atas diatur keAllow
, dan kemudian centang kotak centang di sebelahFull control
.Hit
OK
,Apply
,OK
,OK
.Cobalah lagi sekarang ...
Tampaknya kadang-kadang bash-bash tidak dapat mengontrol kepemilikan file. Ini sangat aneh, karena dihasilkan dari skrip mock-bash. Sosok pergi.
sumber
Tak satu pun dari solusi yang disarankan di sini (chmod / chgrp / setfacl / windows perms) bekerja untuk saya dengan msys64 pada Windows 7 perusahaan VM. Pada akhirnya saya mengatasi masalah dengan menggunakan agen ssh dengan kunci yang disediakan pada stdin. Menambahkan ini ke saya
.bash_profile
menjadikannya default untuk login saya:Sekarang saya bisa melakukan git push and pull dengan remote ssh.
sumber