Git dan SSH, kunci apa yang digunakan?

94

Katakanlah .sshdirektori Anda berisi 30 kunci (15 pribadi dan 15 publik).

Di mana di Git seseorang dapat memeriksa yang mana yang digunakan untuk terhubung ke repositori jarak jauh tertentu?

James Raitsev
sumber
10
Siapa pun yang memilih untuk "menutup", pertanyaan ini - secara langsung terkait dengan pemrograman karena alasan yang sama, pertanyaan tentang GIT diizinkan di sini
James Raitsev
1
Bisa dibilang ... Ini benar-benar pertanyaan pengguna super, masalahnya di sini bukanlah git, tetapi platform tempat menjalankannya. Anda tidak dapat memeriksa masalah di "in git", karena git tidak peduli, ini hanya berhubungan dengan cara Anda menggunakan ssh dan bagaimana konfigurasinya. Apakah Anda menggunakan ssh-agent, semua jenis sistem manajemen kunci, sistem operasi apa yang Anda gunakan, versi apa, dan sebagainya?
Arafangion

Jawaban:

68

Entri berikut dalam .ssh/configfile memecahkan masalah

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

Di mana ~/.ssh/whateverjalur ke kunci pribadi Anda

Selain itu, pengguna dan host dapat diambil dari

git push [email protected]:repo_name.git
         ^__ ^_______________
         user host
James Raitsev
sumber
jadi jika saya ingin menggunakan kunci ssh lain untuk host yang berbeda, apakah saya akan mengulangi hal yang sama setelah yang pertama ?? Apakah identityfile berkaitan dengan host pertama sebelumnya?
MikeSchem
ok, ya, sepertinya itu yang terjadi cyberciti.biz/faq/…
MikeSchem
68

Mengeksekusi ssh dalam mode verbose, alias ssh -v user@host, akan mencetak banyak sekali info debugging, yang juga berisi detail keyfiles mana yang dicoba untuk login.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Sekarang jika Anda menggabungkan ini, dengan Langkah 4 di halaman bantuan SSH milik Git , ssh -vT [email protected]dapat memberikan jawabannya.

Catatan: Anda juga dapat menggunakan -isakelar untuk memberi tahu ssh selama eksekusi perintah, keyfile mana yang akan digunakan.

Vajk Hermecz
sumber
1
Anda juga dapat menggrep output kesalahan standar dari perintah ssh untuk menemukan file kunci seperti ini: ssh -vv user@host 2> >(grep Offering)- ini akan mempermudah. File terakhir harus berupa kunci publik. Contoh:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.
3
githubtidak sama dengan git.
ForeverWintr
9

Kecuali ditentukan di .ssh/configdalamnya , itu akan menggunakan file kunci pribadi default.

File default adalah ~/.ssh/id_rsaatau ~/.ssh/id_dsaatau ~/.ssh/identitytergantung pada versi protokol.

Rodrigo Flores
sumber
Kapan kunci ditambahkan ke host yang dikenal?
mountainLion
6

Menurut saya yang paling praktis menurut selera saya adalah:

GIT_SSH_COMMAND='ssh -v' git …

tentu saja, tergantung pada keadaan, mungkin bermanfaat untuk mengekspornya ke lingkungan SHELL saat ini sehingga Anda tidak perlu menambahkannya secara manual setiap kali. Maka akan menjadi seperti ini:

export GIT_SSH_COMMAND='ssh -v'
git …

- Seperti yang man gitdisarankan, ada beberapa variabel lingkungan yang akan mempengaruhi operasi Git dengan penggunaan SSH. Menurut man sshAnda bisa mendapatkan beberapa info debugging saat menerapkan -vopsi (tidak hanya tetapi juga, lihat manual jika Anda penasaran lebih lanjut).

kunci mana yang digunakan?

Dalam keluaran, Anda akan melihat sesuatu seperti…

debug1: Offering public key: …

… Yang merupakan jawaban atas qn Anda.

poige
sumber
1
IYA. Ini harus menjadi jawaban yang diterima. Untuk membuatnya bekerja pada jendela CMD (ugh), gunakan: set GIT_SSH_COMMAND=ssh -v. Ini membantu saya mengetahui bahwa ssh-config Inlcude-Path harus seperti ini di windows: Include /C/Users/YourUserName.ssh/configuntuk membuat ssh dan dengan demikian git menggunakan file config yang kemudian menggunakan misalnya HOST *entri untuk menentukan file identitas yang digunakan git / ssh.
Eserasatau
5

Karena githanya digunakan sshuntuk terhubung, itu akan menggunakan kunci mana pun yang sshakan digunakan untuk terhubung ke host jarak jauh. Lihat ~/.ssh/configfile untuk detailnya; yang hostblok menggunakan IdentityFiledirektif untuk menentukan kunci pribadi untuk digunakan. Halaman ssh_config(5)manual berisi detail lengkap.

sarnold
sumber
Hmm .. file tersebut tidak ada di sistem saya. Haruskah itu?
James Raitsev
1
@JAM OS apa yang Anda gunakan? Selain itu, terkadang file konfigurasi ada di/etc/ssh/ssh_config
Saya menggunakan MACOS. Ditemukan /etc/ssh_configyang tampaknya merupakan file yang penuh dengan entri komentar
James Raitsev
@sarnold Anda dapat membuat ~/.ssh/configsendiri.
xdazz
4

Ini mungkin super edge, tetapi setelah menjalankannya ssh -vT [email protected]menunjukkan kepada saya bahwa ia sedang memeriksa /root/.sshkunci, saya mengharapkannya untuk memeriksa direktori home saya dan kemudian saya menyadari bahwa saya masuk sebagai root!

Moak
sumber
Teknik ini, antara lain sshcara interogasi yang sama, merupakan solusi yang tepat. Terima kasih.
eigenfield
1

Di server jarak jauh, edit file sshd_config dan ubah LogLevel dari INFO ke VERBOSE dan mulai ulang ssh.

Sekarang file log Anda akan menyimpan sidik jari dari kunci yang digunakan untuk mengotentikasi setiap pengguna.

Di Ubuntu, file-file ini adalah:

/etc/ssh/sshd_config
/var/log/auth.log

tetapi mereka mungkin berbeda di distro lain. Hanya google untuk lokasinya (beberapa menggunakan / var / log / aman misalnya).

seumasmac
sumber