Pertanyaan Bagaimana cara memberi tahu kunci pribadi mana yang harus digunakan?
ssh
memiliki -i
opsi untuk memberi tahu file kunci pribadi mana yang akan digunakan saat mengautentikasi:
-i identity_file
Pilih file dari mana
identitas (kunci pribadi) untuk otentikasi RSA atau DSA dibaca.
Standarnya adalah ~/.ssh/identity
untuk versi protokol 1,
dan ~/.ssh/id_rsa
dan ~/.ssh/id_dsa
untuk versi protokol 2.
File identitas juga dapat ditentukan berdasarkan per-host
dalam file konfigurasi. Dimungkinkan untuk memiliki banyak -i
pilihan
(dan banyak identitas yang ditentukan dalam file konfigurasi).
Apakah ada cara yang serupa untuk diceritakan git
file kunci pribadi yang akan digunakan pada sistem dengan beberapa kunci privat di ~/.ssh
direktori?
464
2018-01-12 18:20
asal
Jawaban:
Di ~/.ssh/config
, tambahkan:
host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa_github
User git
Sekarang Anda bisa melakukannya git clone git@github.com:username/repo.git
.
CATATAN: Verifikasi bahwa izin pada IdentityFile adalah 400.SSH akan menolak, dengan cara eksplisit tidak jelas, kunci SSH yang terlalu mudah dibaca. Itu hanya akan terlihat seperti penolakan kredensial. Solusinya, dalam hal ini, adalah:
chmod 400 ~/.ssh/id_rsa_github
516
2018-01-12 19:36
Variabel lingkungan GIT_SSH_COMMAND
:
Dari Git versi 2.3.0, Anda dapat menggunakan variabel lingkungan GIT_SSH_COMMAND
seperti ini:
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone example
Perhatikan itu -i
kadang-kadang dapat diganti oleh file konfigurasi Anda, dalam hal ini, Anda harus memberi SSH file konfigurasi kosong, seperti ini:
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git clone example
Konfigurasi core.sshCommand
:
Dari Git versi 2.10.0, Anda dapat mengonfigurasi ini per repo atau secara global, jadi Anda tidak perlu mengatur variabel lingkungan lagi!
git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push
216
2018-05-08 09:43
Ada tidak langsung cara untuk memberi tahu git
kunci pribadi mana yang akan digunakan, karena bergantung pada ssh
untuk autentikasi repositori. Namun, masih ada beberapa cara untuk mencapai tujuan Anda:
Pilihan 1: ssh-agent
Kamu dapat memakai ssh-agent
untuk sementara memberi otorisasi kunci pribadi Anda.
Sebagai contoh:
$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'
Pilihan 2: GIT_SSH_COMMAND
Berikan argumen ssh dengan menggunakan GIT_SSH_COMMAND
variabel lingkungan
(Git 2.3.0+).
Sebagai contoh:
$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
git clone user@host
Anda dapat mengetik ini semua dalam satu baris - abaikan $
dan tinggalkan \
.
Opsi 3: GIT_SSH
Berikan argumen ssh dengan menggunakan GIT_SSH
variabel lingkungan untuk menentukan alternatif ssh
biner.
Sebagai contoh:
$ echo 'ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH='./ssh' git clone user@host
Catatan: Baris di atas adalah baris perintah shell (terminal) yang harus Anda tempelkan ke terminal Anda. Mereka akan membuat file bernama ssh
, membuatnya dapat dieksekusi, dan (secara tidak langsung) menjalankannya.
catatan: GIT_SSH
tersedia sejak v0.99.4 (2005).
Opsi 4: ~/.ssh/config
Menggunakan ~/.ssh/config
file seperti yang disarankan dalam jawaban lain untuk menentukan lokasi kunci pribadi Anda, mis.
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa
62
2018-01-23 22:08
Tulis skrip yang memanggil ssh
dengan argumen yang Anda inginkan, dan masukkan nama file dari skrip di $GIT_SSH
. Atau cukup tempatkan konfigurasi Anda ~/.ssh/config
.
32
2018-01-12 18:25
Jika Anda tidak ingin harus menentukan variabel lingkungan setiap kali Anda menjalankan git, tidak ingin skrip wrapper lain, jangan / tidak dapat menjalankan ssh-agent (1), atau tidak ingin mengunduh paket lain hanya untuk ini, gunakan git -remote-ext (1) transportasi eksternal:
$ git clone 'ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git'
Cloning into 'repository'
(...)
$ cd repository
$ git remote -v
origin ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git (fetch)
origin ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git (push)
Saya menganggap solusi ini superior karena:
- Ini adalah repositori / spesifik remote
- Hindari membengkokkan naskah pembungkus
- Tidak perlu agen SSH - berguna jika Anda ingin klon / dorongan / tarikan yang tidak dijaga (mis. Dalam cron)
- Jelas, tidak ada alat eksternal yang dibutuhkan
14
2017-07-21 19:44
Setelah perjuangan saya dengan $GIT_SSH
Saya ingin berbagi apa yang berhasil untuk saya.
Melalui contoh-contoh saya, saya akan menganggap Anda memiliki kunci pribadi Anda yang terletak di/home/user/.ssh/jenkins
Kesalahan untuk dihindari: Nilai GIT_SSH menyertakan opsi
$ export GIT_SSH="ssh -i /home/user/.ssh/jenkins"
atau apa pun yang serupa akan gagal, seperti git akan mencoba mengeksekusi nilai sebagai file. Untuk alasan itu, Anda harus membuat skrip.
Contoh kerja dari skrip $ GIT_SSH /home/user/gssh.sh
Skrip akan dipanggil sebagai berikut:
$ $GIT_SSH [username@]host [-p <port>] <command>
Contoh skrip yang berfungsi dapat terlihat seperti:
#!/bin/sh
ssh -i /home/user/.ssh/jenkins $*
Perhatikan $*
pada akhirnya, itu bagian penting dari itu.
Bahkan alternatif yang lebih aman, yang akan mencegah kemungkinan konflik dengan apa pun di file konfigurasi default Anda (ditambah secara eksplisit menyebutkan port untuk digunakan) adalah:
#!/bin/sh
ssh -i /home/user/.ssh/jenkins -F /dev/null -p 22 $*
Dengan asumsi skrip sudah masuk /home/user/gssh.sh
, Anda kemudian akan:
$ export GIT_SSH=/home/user/gssh.sh
dan semua akan berfungsi.
13
2018-05-28 17:09
Gunakan konfigurasi host khusus di ~/.ssh/config
, seperti ini:
Host gitlab-as-thuc
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa.thuc
IdentitiesOnly yes
kemudian gunakan nama host kustom Anda seperti ini:
git remote add thuc git@gitlab-as-thuc:your-repo.git
6
2018-05-17 15:03
Anda bisa menggunakan ssh-ident daripada membuat wrapper Anda sendiri.
Anda dapat membaca lebih lanjut di:
https://github.com/ccontavalli/ssh-ident
Ini memuat kunci ssh pada permintaan ketika pertama kali diperlukan, sekali, bahkan dengan beberapa sesi login, xterms atau NFS berbagi rumah.
Dengan file konfigurasi kecil, secara otomatis dapat memuat kunci yang berbeda dan memisahkannya dalam agen yang berbeda (untuk penerusan agen) tergantung pada apa yang perlu Anda lakukan.
5
2018-03-23 01:35