Mungkin situasi yang agak tidak biasa, tetapi saya ingin menentukan kunci SSH pribadi untuk digunakan ketika menjalankan perintah shell (git) dari komputer lokal.
Pada dasarnya seperti ini:
git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"
Atau bahkan lebih baik (dalam Ruby):
with_key("/home/christoffer/ssh_keys/theuser") do
sh("git clone [email protected]:TheUser/TheProject.git")
end
Saya telah melihat contoh menghubungkan ke server jauh dengan Net :: SSH yang menggunakan kunci pribadi yang ditentukan, tetapi ini adalah perintah lokal. Apa itu mungkin?
-i
pilihan sepertissh
itu.git config core.sshCommand 'ssh -i private_key_file'
. Lihat jawaban saya di bawah iniJawaban:
Sesuatu seperti ini seharusnya berfungsi (disarankan oleh orip):
jika Anda lebih suka subkulit, Anda dapat mencoba yang berikut (meskipun lebih rapuh):
Git akan memanggil SSH yang akan menemukan agennya dengan variabel lingkungan; ini akan, pada gilirannya, memiliki kunci dimuat.
Atau, pengaturan
HOME
juga dapat melakukan trik, asalkan Anda bersedia menata direktori yang hanya berisi.ssh
direktori sebagaiHOME
; ini dapat berisi identity.pub, atau pengaturan file konfigurasi IdentityFile.sumber
ssh-agent bash -c 'ssh-add sshkey; git clone url'
ssh-agent $(..)
sintaks tidak bekerja untuk saya dan saya tidak yakin bagaimana ini adalah rasa untuk pekerjaan: (ba) sh harus menjalankan perintah dalam$(..)
pertama, kemudian jalankan ssh-agent dengan output sebagai parameter.Tidak ada solusi yang berhasil untuk saya.
Sebagai gantinya, saya menguraikan tentang @Martin v. Löwis tentang pengaturan a
config
file untuk SSH.SSH akan mencari
~/.ssh/config
file pengguna . Saya memiliki pengaturan milik saya sebagai:Dan saya menambahkan repositori git jarak jauh:
Dan kemudian perintah git bekerja secara normal untuk saya.
CATATAN
IdentitiesOnly yes
diperlukan untuk mencegah perilaku default SSH mengirim file identitas yang cocok dengan nama file default untuk setiap protokol. Jika Anda memiliki file dengan nama~/.ssh/id_rsa
yang akan dicoba SEBELUM Anda~/.ssh/id_rsa.github
tanpa opsi ini.Referensi
sumber
Host remote.server.com
dan tetap menggunakan URL aslichmod 600 ~/.ssh/config
(lihat di sini ). Dan jika Anda menggunakan GitHub, gantiHost gitserv
denganHost github.com
, hapusHostname remote.server.com
, dan tambahkan jarak jauh dengangit remote add origin [email protected]:user_name/repo_name.git
.Mulai dari Git 2.3.0 kami juga memiliki perintah sederhana (tidak memerlukan file config):
sumber
cannot run ssh -i /home/vagrant/.ssh/git: No such file or directory
meskipun ada444 Nov 16 18:12 /home/vagrant/.ssh/git
darils -l /home/vagrant/.ssh/git
chmod 400 <path-to-private-key-file>
. Kalau tidak, perintah git mungkin gagal tanpa pesan kesalahan khusus ...-o IdentitiesOnly=yes
untuk memastikan bahwa kunci yang ditentukan dengan-i
digunakan (sebagai lawan kunci dari agen SSH).Saran orang lain tentang itu
~/.ssh/config
sangat rumit. Ini bisa sesederhana:sumber
IdentitiesOnly
opsi juga.git remote add ssh://personal/org/proj.git && git remote add ssh://corporate/org/proj.git
. Kemudian AndaHost personal HostName github.com ... Host corporate HostName github.com
Isi my_git_ssh_wrapper:
Kemudian Anda dapat menggunakan kunci dengan melakukan:
sumber
GIT_SSH="git_wrapper" git clone ssh://user@server/path/to/project"
Dengan git 2.10+ (Q3 2016: dirilis September 2d, 2016), Anda memiliki kemungkinan untuk menetapkan konfigurasi untuk
GIT_SSH_COMMAND
(dan bukan hanya variabel lingkungan seperti yang dijelaskan dalam Rober Jack Will 's jawaban )Lihat komit 3c8ede3 (26 Jun 2016) oleh Nguyễn Thái Ngọc Duy (
pclouds
) .(Digabung oleh Junio C Hamano -
gitster
- di commit dc21164 , 19 Jul 2016)Artinya
git clone
bisa:Anda bahkan dapat mengaturnya hanya untuk satu perintah:
Ini lebih mudah daripada mengatur
GIT_SSH_COMMAND
variabel lingkungan, yang, pada Windows, seperti dicatat oleh Mátyás Kuti-Kreszács , akan menjadisumber
git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git
diikuti oleh set konfigurasigit config core.sshCommand 'ssh -i private_key_file'
Untuk meringkas jawaban dan komentar , cara terbaik untuk mengatur git untuk menggunakan file kunci yang berbeda dan kemudian melupakannya, yang juga mendukung pengguna yang berbeda untuk host yang sama (misalnya akun GitHub pribadi dan yang berfungsi), yang bekerja pada Windows juga, untuk mengedit
~/.ssh/config
(atauc:\Users\<your user>\.ssh\config
) dan menentukan beberapa identitas:Kemudian, untuk mengkloning proyek sebagai pengguna pribadi Anda, jalankan
git clone
perintah biasa .Untuk mengkloning repo sebagai
workuser
, jalankangit clone git@github-work:company/project.git
.sumber
dandv
danworkuser
untuk mendukung contoh saya, "mis. akun GitHub pribadi dan akun kerja".dandv
adalah nama pengguna GitHub saya.IdentitiesOnly yes
file konfigurasi ssh saya.Seperti yang dinyatakan di sini: https://superuser.com/a/912281/607049
Anda dapat mengonfigurasinya per-repo:
sumber
-F /dev/null
harus dilakukan Sejauh yang saya bisa lihat ini akan mengubah configFile dari~/.ssh/config
default tetapi mengapa itu diinginkan? Untuk memastikan perintah kotak pasir?Masalahnya adalah ketika Anda memiliki repositori jarak jauh yang berbeda pada host yang sama (katakanlah github.com), dan Anda ingin berinteraksi dengannya menggunakan kunci ssh yang berbeda (yaitu akun GitHub yang berbeda).
Untuk melakukan itu:
Pertama, Anda harus mendeklarasikan kunci yang berbeda dalam
~/.ssh/config
file.Dengan melakukan ini, Anda mengasosiasikan kunci kedua dengan nama ramah baru "XXX" untuk github.com.
Maka Anda harus mengubah asal remote repositori tertentu Anda, sehingga ia menggunakan nama ramah yang baru saja Anda tetapkan.
Pergi ke folder repositori lokal Anda di dalam prompt perintah, dan tampilkan asal jarak jauh saat ini:
Kemudian ubah asal dengan:
Sekarang Anda dapat menekan, mengambil ... dengan tombol kanan secara otomatis.
sumber
atau
sumber
Gagasan yang lebih baik untuk menambahkan host atau ip ke
.ssh/config
file seperti:sumber
git clone git@gh-work:repo/project.git
Dalam ~ / .ssh / config saya memiliki dua bagian yang keduanya menggunakan github.com untuk HostName. Mereka hanya memiliki IdentityFile dan Host yang berbeda~/.ssh/config
pastebin.com/8rYn7yCiSaya menggunakan variabel lingkungan GIT_SSH. Inilah pembungkus saya, mirip dengan yang dari Joe Block dari atas, tetapi menangani sejumlah argumen.
File ~ / gitwrap.sh
Kemudian, di .bashrc saya, tambahkan berikut ini:
sumber
gitwrap.sh
, misalnya/home/ubuntu/gitwrap.sh
-o StrictHostKeyChecking=no
perintah sshJika tidak ada solusi lain di sini yang berfungsi untuk Anda, dan Anda telah membuat beberapa ssh-keys, tetapi masih tidak dapat melakukan hal-hal sederhana seperti
kemudian dengan asumsi Anda memiliki dua file kunci ssh seperti
lalu di dalam git repo, coba:
dan juga pastikan nama pengguna dan userid default github Anda benar dengan:
Lihat https://gist.github.com/jexchan/2351996 untuk informasi lebih lanjut.
sumber
Could not open a connection to your authentication agent.
, coba$ eval `ssh-agent -s`
, dan coba lagi.ssh-add
trik perintahnya bekerja untuk saya. Tambahkan kunci identitas ke daftar yang dicoba ketika ssh mengautentikasi. Ini bekerja dengan baik untuk saya!ssh-add
?.git
di dalam repo bukan program git secara global. Anda dapat menggunakan--global
untuk mengatur nama pengguna dan email global.Ketika Anda perlu terhubung ke github dengan permintaan normal (
git pull origin master
), pengaturan Host sebagai*
di~/.ssh/config
bekerja untuk saya, setiap host lain (misalnya, "github" atau "gb") tidak bekerja.sumber
Host my-host-alias
, Anda harus mengaturremote.origin.url=git@my-host-alias:[username]/[repo].git
.Banyak dari solusi ini terlihat menarik. Namun, saya menemukan pendekatan generik git-wrapping-script di tautan berikut menjadi yang paling berguna:
Cara Menentukan File Kunci ssh dengan
git
perintahIntinya adalah bahwa tidak ada
git
perintah seperti berikut:Solusi Alvin adalah menggunakan skrip bash-wrapper yang didefinisikan dengan baik yang mengisi celah ini:
Dimana
git.sh
:Saya dapat memverifikasi bahwa ini memecahkan masalah yang saya alami dengan user / pengakuan kunci untuk repo bitbucket jauh dengan
git remote update
,git pull
, dangit clone
; yang semuanya sekarang berfungsi dengan baik dalamcron
skrip pekerjaan yang sebelumnya mengalami kesulitan menavigasi shell-terbatas. Saya juga dapat memanggil skrip ini dari dalam R dan masih menyelesaikancron
masalah eksekusi yang sama persis (misalnyasystem("bash git.sh -i ~/.ssh/thatuserkey.pem pull")
).Bukan berarti R sama dengan Ruby, tetapi jika R dapat melakukannya ... O :-)
sumber
GIT_SSH_COMMAND="ssh -i ~/.ssh/thatuserkey.pem" git clone clone [email protected]:/git/repo.git
per jawaban Robert Jack Will ?jika Anda memiliki direktori di jalur Anda di mana Anda ingin masuk dengan file identfikasi yang diberikan, Anda dapat menentukan untuk menggunakan file identifikasi spesifik melalui file .ssh / config dengan mengatur
ControlPath
misalnya:Kemudian
ssh
akan menggunakan file identitas yang ditentukan saat melakukan perintah git di bawah jalur kerja yang diberikan.sumber
ControlMaster auto
danControlPersist yes
, sehingga Anda tidak perlu mengetik ulang kata sandi setiap waktu. Temukan info di artikelAnda perlu membuat ~ / .ssh / config seperti di bawah ini
izin seperti di bawah ini
Tambahkan kunci publik Anda ke git Anda (cat ~ / .ssh / id_rsa_pub [atau nama simillar])
dan kemudian git klon seperti di bawah ini
sumber
Banyak jawaban yang baik, tetapi beberapa dari mereka mengasumsikan pengetahuan administrasi sebelumnya.
Saya pikir itu adalah penting untuk secara eksplisit menekankan bahwa jika Anda memulai proyek Anda dengan kloning URL web -
https://github.com/<user-name>/<project-name>.git
maka Anda perlu memastikan bahwa yang
url
nilai di bawah[remote "origin"]
di.git/config
diubah ke URL SSH (lihat blok kode di bawah ini).Dengan tambahan itu pastikan Anda menambahkan
sshCommmand
seperti yang disebutkan di bawah ini:Baca lebih lanjut di sini .
sumber
Di Windows dengan Git Bash Anda dapat menggunakan yang berikut ini untuk menambahkan repositori
ssh-agent bash -c 'ssh-add "key-address"; git remote add origin "rep-address"'
misalnya:ssh-agent bash -c 'ssh-add /d/test/PrivateKey.ppk; git remote add origin [email protected]:test/test.git'
Kunci privat apa yang ada di drive D, folder test komputer. Juga jika Anda ingin mengkloning repositori, Anda dapat mengubahnyagit remote add origin
dengangit clone
.Setelah memasukkan ini ke Git Bash, itu akan meminta Anda untuk frasa sandi!
Waspadalah yang membuka kunci pribadi dan kunci pribadi dempul berbeda!
Jika Anda telah membuat kunci Anda dengan puttygen, Anda harus mengonversi kunci pribadi Anda menjadi openssh!
sumber
Anda dapat menggunakan variabel lingkungan GIT_SSH. Tetapi Anda harus membungkus ssh dan opsi menjadi skrip shell.
Lihat git manual:
man git
di shell perintah Anda.sumber
Saya menggunakan
zsh
dan kunci yang berbeda dimuat ke shell zsh sayassh-agent
secara otomatis untuk keperluan lain (yaitu akses ke server jauh) di laptop saya. Saya memodifikasi jawaban @ Nick dan saya menggunakannya untuk salah satu repo saya yang perlu disegarkan sesering mungkin. (Dalam hal ini sayadotfiles
yang ingin versi yang sama dan terbaru di semua mesin saya, di mana pun saya bekerja.)cd
repo dir berhasil, tarik dari repo jarak jauhsumber
untuk gitlab
RSAAuthentication yes
doc ada di sini
sumber
Agar GIT_SSH_COMMAND variabel lingkungan berfungsi di bawah Windows alih-alih:
Menggunakan:
Kutipan harus seperti
Beberapa backgorund: https://stackoverflow.com/a/34402887/10671021
sumber
Jika nomor port SSH tidak 22 (default), tambahkan
Port xx
di~/.ssh/config
Dalam kasus saya (synology),
Kemudian klon menggunakan judul Host di config. ("my_synology". untuk menghindari "*" dari @chopstik)
sumber
Jika Anda seperti saya, Anda dapat:
Biarkan kunci ssh Anda teratur
Buat perintah git clone Anda sederhana
Tangani sejumlah kunci untuk sejumlah repositori.
Kurangi perawatan kunci ssh Anda.
Saya menyimpan kunci saya di
~/.ssh/keys
direktori saya .Saya lebih suka konvensi daripada konfigurasi.
Saya pikir kode adalah hukum; semakin sederhana, semakin baik.
LANGKAH 1 - Buat Alias
Tambahkan alias ini ke shell Anda:
alias git-clone='GIT_SSH=ssh_wrapper git clone'
LANGKAH 2 - Buat Skrip
Tambahkan skrip ssh_wrapper ini ke PATH Anda:
CONTOH
Gunakan kunci github.com/l3x:
Contoh berikut juga menggunakan kunci github.com/l3x (secara default):
Gunakan kunci bitbucket.org/lsheehan:
CATATAN
Ubah SSH_KEY default di skrip ssh_wrapper menjadi apa yang paling sering Anda gunakan. Dengan begitu, Anda tidak perlu menggunakan variabel KEY sebagian besar waktu.
Anda mungkin berpikir, "Hei! Itu banyak terjadi dengan alias, skrip dan beberapa direktori kunci," tetapi bagi saya itu adalah konvensi. Hampir semua workstation saya (dan server dalam hal ini) dikonfigurasi dengan cara yang sama.
Tujuan saya di sini adalah menyederhanakan perintah yang saya jalankan secara teratur.
Konvensi saya, misalnya, skrip Bash, alias, dll., Menciptakan lingkungan yang konsisten dan membantu saya menyederhanakannya.
KISS dan masalah nama.
Untuk tips desain lainnya, lihat Bab 4 SOLID Design in Go dari buku saya: https://www.amazon.com/Learning-Functional-Programming-Lex-Sheehan-ebook/dp/B0725B8MYW
Semoga itu bisa membantu. - Lex
sumber
Anda dapat mencoba paket sshmulti npm untuk mempertahankan beberapa kunci ssh.
sumber
Masalah dengan metode ini adalah, setidaknya ketika dijalankan oleh bash.exe di Windows, itu akan membuat proses baru setiap kali yang akan tetap tidak aktif.
Jika Anda ingin menggunakannya untuk repro syncig sesuai jadwal maka Anda perlu menambahkan "&& ssh-agent -k" di bagian akhir.
Sesuatu seperti:
ssh-agent -k akan membunuh prosesnya ketika sudah selesai.
sumber
Saya hanya perlu menambahkan kunci lalu menjalankan git clone lagi.
sumber
Inilah hack kunci ssh yang saya temukan saat menemukan solusi untuk masalah ini:
Misalnya Anda memiliki 2 set kunci yang berbeda:
key1, key1.pub, key2, key2.pub
Simpan kunci-kunci ini di
.ssh
direktori AndaSekarang di file Anda
.bashrc
atau.bash_profile
alias, tambahkan perintah inialias key1='cp ~/.ssh/key1 id_rsa && cp ~/.ssh/key1.pub id_rsa.pub'
alias key2='cp ~/.ssh/key2 id_rsa && cp ~/.ssh/key2.pub id_rsa.pub'
Voila! Anda memiliki pintasan untuk berganti tombol kapan pun Anda mau!
Semoga ini berhasil untuk Anda.
sumber