කුමන පුද්ගලික යතුර භාවිතා කළ යුතුදැයි git ට පවසන්නේ කෙසේද?


727

sshසතුව -iඅනන්යතාවය තහවුරු කරගැනීම විට භාවිතා කිරීමට ඇති පුද්ගලික යතුර ගොනුව කියන්න විකල්පය:

-i identity_file

    RSA හෝ DSA සත්‍යාපනය සඳහා අනන්‍යතාවය (පුද්ගලික යතුර) කියවන ගොනුවක් තෝරා ගනී. ප්රකෘතිය වේ ~/.ssh/identityProtocol Version 1, සහ ~/.ssh/id_rsaසහ ~/.ssh/id_dsaවාහකයක් අනුවාදය සඳහා 2. අනන්යතාවය ගොනු ද මානකරන ගොනුව තුල එක්-සත්කාරක පදනම මත නියම කරනු ලැබිය හැකිය. බහුවිධ -iවිකල්ප (සහ වින්‍යාස ලිපිගොනු වල බහු අනන්‍යතා) තිබිය හැක.

බහලුමේ gitපුද්ගලික යතුරු කිහිපයක් ඇති පද්ධතියක කුමන පුද්ගලික යතුරු ගොනුවක් භාවිතා කළ යුතුදැයි පැවසීමට සමාන ක්‍රමයක් ~/.sshතිබේද?


3
බලන්න StackOverflow මේ ප්රශ්නය මෙන්ම.
Flimm

Answers:


742

තුළ ~/.ssh/config, එකතු කරන්න:

host github.com
 HostName github.com
 IdentityFile ~/.ssh/id_rsa_github
 User git

වින්‍යාස ගොනුව අළුත් නම්, කිරීමට අමතක නොකරන්න chmod 600 ~/.ssh/config

දැන් ඔබට කළ හැකිය git clone git@github.com:{ORG_NAME}/{REPO_NAME}.git

  • {ORG_NAME}ඔබගේ GitHub පරිශීලක ගිණුමේ (හෝ සංවිධාන ගිණුමේ) GitHub URI නම කොහිද?
    • කෙලින්ම ඇති බව සටහන :පසු github.comඒ වෙනුවට සිඳ ක /මේ URI නැත ලෙස -.
  • හා {REPO_NAME}ඔබගේ GitHub ණයකට ගේ URI නම
  • උදාහරණයක් ලෙස, ලිනක්ස් කර්නලය සඳහා මෙය වනු ඇත git clone git@github.com:torvalds/linux.git).

සටහන: ලිනක්ස් සහ මැකෝස් මත, ඔබගේ අවසරයන් IdentityFile400 ක් බව තහවුරු කරගන්න. පැහැදිලිව පැහැදිලි නොවන ආකාරයකින් SSH යතුරු ප්‍රතික්ෂේප කරනු ඇත. එය අක්තපත්‍ර ප්‍රතික්ෂේප කිරීමක් මෙන් පෙනෙනු ඇත. මෙම අවස්ථාවේ දී විසඳුම වන්නේ:

chmod 400 ~/.ssh/id_rsa_github

144
විවිධ යතුරු සමඟ එකම ධාරකයට සම්බන්ධ වීමට ඔබට අවශ්‍ය නම් කුමක් කළ යුතුද?
වැලන්ටින් ක්ලින්හැම්මර්

7
@Quelltextfabrik - ඔබට වෙනත් සත්කාරක සමාගමක්
බෙන්

1
Man ක්ලිෆ් නොප්, මගේ පිටුවේ: " HostName: ලොග් වීමට සැබෑ සත්කාරක නාමය නියම කරයි. ධාරකයන් සඳහා අන්වර්ථ නාම හෝ කෙටි යෙදුම් සඳහන් කිරීමට මෙය භාවිතා කළ හැකිය." මගේ ssh අනුවාදය openssh-6.7p1 වේ.
ග්‍රිසියම්

14
වින්‍යාස ගොනුව අළුත් නම්, එය කිරීමට අමතක නොකරන්නchmod 600 ~/.ssh/config
elysch

3
@Falentm වෙතින් ලැබෙන පිළිතුර මෙම වැලන්ටින් ක්ලින්හැම්මර්ට මෙම ප්‍රශ්නයට විසඳුම ඇත. එය core.sshCommandgit වින්‍යාසය භාවිතා කිරීමයි . superuser.com/a/912281/162466
VasyaNovikov

412

පරිසර විචල්‍යය GIT_SSH_COMMAND:

Git අනුවාදය 2.3.0 සිට, ඔබට මේ ආකාරයට පරිසර විචල්‍යය භාවිතා කළ හැකිය GIT_SSH_COMMAND:

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone example

-iසමහර විට ඔබගේ වින්‍යාස ගොනුව මගින් අභිබවා යා හැකි බව සලකන්න, එවැනි අවස්ථාවකදී, ඔබ SSH සඳහා හිස් වින්‍යාස ගොනුවක් ලබා දිය යුතුය.

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git clone example

වින්‍යාසය core.sshCommand:

Git අනුවාදය 2.10.0 සිට, ඔබට මෙය එක් එක් repo එකකට හෝ ගෝලීයව වින්‍යාසගත කළ හැකිය, එබැවින් ඔබට තවදුරටත් පරිසර විචල්‍යය සැකසිය යුතු නැත!

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push

2
මෙම කාර්යය සිදු කිරීම සඳහා මට ෂෙල් විචල්‍යය පරිසර විචල්‍යයකට අපනයනය කිරීමට සිදු විය, එනම් export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example", එසේ නම්git clone example
අබ්දුල්

7
B අබ්දුල් ඉන් බාෂ්, විධානය එකම රේඛාවකින් සිදු කිරීම එම විධානය සඳහා පරිසර විචල්‍යය අපනයනය කරයි. එය උත්සාහ කරන්න : example=hello /usr/bin/env | grep example.
Flimm

3
දේවල් ඊටත් වඩා හොඳ වී ඇත: Git 2.10 වන විට, ඔබට ඔබේ Git වින්‍යාසය තුළ විධානය ගබඩා කළ හැකිය: stackoverflow.com/a/38474220/520162
eckes

2
O නොයිට්ඩාර්ට් /dev/nullයනු යුනික්ස් වැනි මෙහෙයුම් පද්ධති වල වලංගු ගොනු නාමයක් පමණි, එය වින්ඩෝස් මත ක්‍රියා නොකරයි.
Flimm

3
මට GIT_SSH_COMMANDමම භාවිතා වන තුරු වැඩ කටයුතු කළේ නැත IdentitiesOnlyමෙවැනි විධානයක් ලෙස,: GIT_SSH_COMMAND="ssh -i ~/.ssh/mysubdir/id_rsa -o 'IdentitiesOnly yes'" git push.
ටයිලර් කොලියර්

125

නැත කිසිදු ඍජු මාර්ගය කියන්න gitඑය මත රැඳී පවතී නිසා, භාවිතයට ගැනීමට පෞද්ගලික යතුර sshගබඩාව අනන්යතාවය තහවුරු කරගැනීම සඳහා. කෙසේ වෙතත්, ඔබේ ඉලක්කය සපුරා ගැනීමට ක්‍රම කිහිපයක් තවමත් තිබේ:

විකල්ප 1: ssh-agent

ssh-agentඔබේ පුද්ගලික යතුර තාවකාලිකව අවසර දීමට ඔබට භාවිතා කළ හැකිය .

උදාහරණයක් වශයෙන්:

$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'

විකල්ප 2: GIT_SSH_COMMAND

GIT_SSH_COMMANDපරිසර විචල්‍යය (Git 2.3.0+) භාවිතා කරමින් ssh තර්ක සම්මත කරන්න.

උදාහරණයක් වශයෙන්:

$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
  git clone user@host

ඔබට මේ සියල්ල එක පේළියකින් ටයිප් කළ හැකිය - නොසලකා $හැර යන්න \.

විකල්ප 3: GIT_SSH

GIT_SSHවිකල්ප sshද්විමය නියම කිරීම සඳහා පරිසර විචල්‍යය භාවිතා කරමින් ssh තර්ක සම්මත කරන්න .

උදාහරණයක් වශයෙන්:

$ 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

සටහන: ඉහත රේඛා ඔබේ පර්යන්තයට ඇලවිය යුතු ෂෙල් (ටර්මිනල්) විධාන රේඛා වේ. ඔවුන් නම් කරන ලද ගොනුවක් sshසාදනු ඇත, එය ක්‍රියාත්මක කළ හැකි වන අතර (වක්‍රව) එය ක්‍රියාත්මක කරයි.

සටහන: GIT_SSHv0.99.4 (2005) සිට ලබා ගත හැකිය .

විකල්ප 4: ~/.ssh/config

~/.ssh/configඔබේ පුද්ගලික යතුරේ පිහිටීම සඳහන් කිරීම සඳහා වෙනත් පිළිතුරු වල යෝජනා කර ඇති පරිදි ගොනුව භාවිතා කරන්න , උදා

Host github.com
  User git
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa

1
//, මෙම ප්‍රශ්නයේදී මෙන් ssh-agent හි ඔබගේ අනන්‍යතාවය ඉදිරිපත් කරන්නේ නම් කුමක් කළ යුතුද? superuser.com/questions/971732/…
නේතන් බසානිස්

1
මෙම ලිපිය නැවත ආකෘතිකරණය කිරීමට මම මට ඉඩ දී ඇත: IMO මෙය වඩාත් පුළුල් පිළිතුරකි. එහි මුල් සැලසුමේදී, ඉක්මන් ස්කෑන් පරීක්ෂණයක් මඟින් ගැටලුවට තනි සංකීර්ණ විසඳුමක් විස්තර කරන පෝස්ට් එකක් යෝජනා කළ නිසා මට එය මඟ හැරුණි.
ඇල්බර්ටෝ

4
$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'වෙන කිසිවක් නැති විට මා වෙනුවෙන් වැඩ කළා. කුඩෝස්.
ඩැනියෙල් ඩිවර්ස්ට්

1
මට ~/.ssh/configක්‍රමයක් භාවිතා කිරීමට සිදු විය ,
එන්ව් වර්ස්

1
GIT_SSHv0.99.4 (2005 අගෝස්තු) සිට ලබා ගත හැකිය , එබැවින් මූලික වශයෙන් Git පවතින බැවින් (2005 අප්‍රේල්).
ඩොමිනික්

33

sshඔබට අවශ්‍ය තර්ක සමඟින් පිටපතක් ලියන්න , සහ පිටපතෙහි ගොනු නාමය දමන්න $GIT_SSH. නැතහොත් ඔබේ වින්‍යාසය ඇතුලත් කරන්න ~/.ssh/config.


2
මෙය කරන්නේ කෙසේද යන්න පිළිබඳ තවත් පැහැදිලි කිරීමක් .
සිත්සු

1
~/.ssh/config යන්න ක්රමයක්.
hek2mgl

මම වැඩ කරන්නේ යන්ත්‍රයක් (A) සිට මම සේවාදායකයක් (B) වෙතට තල්ලු කරන අතර එය ssh යතුරු සත්‍යාපනය පමණක් පිළිගනී. මගේ ~ / .ssh / config (A) මත පිහිටුවා ඇති අතර මට කෙලින්ම වැඩ විට සම්පූර්ණයෙන්ම දඩ වැඩ මත බව යන්ත්රය, එය මම සමහර වෙනත් ස්ථාන (C) සිට ලොගින් විට නැහැ. $GIT_SSHස්ක්‍රිප්ට් එකක් භාවිතා කිරීම සහ මෙම ගැටළුව විසඳීය. ස්තූතියි!
bsumirak

26

මේ ආකාරයට අභිරුචි ධාරක වින්‍යාසය භාවිතා කරන්න ~/.ssh/config:

Host gitlab-as-thuc  
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa.thuc
    IdentitiesOnly yes

ඉන්පසු ඔබගේ අභිරුචි ධාරක නාමය මේ ආකාරයට භාවිතා කරන්න:

git remote add thuc git@gitlab-as-thuc:your-repo.git  

2
නිවස සහ වැඩ සඳහා වෙනම GitHub ගිණුම් ඇති බැවින් මම සොයන පිළිතුර මෙයයි. මට Host work.github.com HostName github.com IdentityFile ~/.ssh/workවැඩ ගබඩාවක් ක්ලෝන කරන සෑම විටම "github.com" වෙනුවට "work.github.com" ආදේශ කිරීමට සිදු විය. එය තවමත් "github.com" වෙත සම්බන්ධ වේ, නමුත් පෙරනිමි නොවන යතුරු යුගලයක් භාවිතා කරයි.
මිකෙල්

1
විස්තර සඳහා වන URL (" itblog.study.land / ..." ) තවදුරටත් ක්‍රියා නොකරයි :(
කාල් ස්මොට්‍රික්ස්

Ar කාල්ස්මොට්‍රික්ස් මුල් එක මෙතැනට ගෙන යන ලදී: medium.com/@thucnc/…
thucnguyen

4
අවසාන!!! මෙම පිළිතුර ඇත්ත වශයෙන්ම පෙන්වන්නේ ඔබ ~/.ssh/configගොනුවේ දැමූ දේ භාවිතා කළ හැකි ආකාරයයි . අනෙක් සෑම පිළිතුරකටම ඔබ සම්භවය එකතු කරන විට ධාරකය සැකසිය හැකි ආකාරය මග හැරී ඇති අතර එමඟින් නිවැරදි යතුරු ගොනුව භාවිතා කිරීමට git ස්වයංක්‍රීයව ඉඩ දෙයි. ඔබට ස්තුතියි!!
බ්‍රයන්වීපීඑස්

1
හොඳයි, ඒක තමයි මම බලන්නේ :)
ලූකස් ඩි අවිලා

23

ඔබ git ධාවනය කරන සෑම අවස්ථාවකම පරිසර විචල්‍යයන් නියම කිරීමට ඔබට අවශ්‍ය නැතිනම්, තවත් එතීමේ ස්ක්‍රිප්ටයක් අවශ්‍ය නොවන්නේ නම්, ssh-agent (1) ධාවනය කිරීමට / නොහැකි කිරීමට හෝ වෙනත් පැකේජයක් බාගත කිරීමට අවශ්‍ය නොවන්නේ නම්, git භාවිතා කරන්න -remote-ext (1) බාහිර ප්‍රවාහනය:

$ 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)

මෙම විසඳුම වඩා උසස් යැයි මම සලකන්නේ:

  • එය නිධිය / දුරස්ථ විශේෂිත වේ
  • එතීමේ ස්ක්‍රිප්ට් පිපිරීමෙන් වළකින්න
  • SSH නියෝජිතයා අවශ්‍ය නොවේ - ඔබට නොදුටු ක්ලෝන / තල්ලු / අදින්නන් අවශ්‍ය නම් ප්‍රයෝජනවත් වේ (උදා: ක්‍රෝන් වලින්)
  • නිසැකවම, බාහිර මෙවලමක් අවශ්ය නොවේ

2
මෙම පිළිතුර හරියටම gitපෞද්ගලික ගිතුබ් ගබඩාවලින් ක්ලෝන / ලබා ගැනීම සඳහා නිධිය විශේෂිත යෙදවීමේ යතුරු භාවිතා කිරීමට චෙෆ්ගේ සම්පතට බල කිරීමට මට අවශ්‍ය විය . පරිසරය / ස්ක්‍රිප්ට් මත පදනම් වූ ඒවාට වඩා මෙම ක්‍රමයේ ඇති අතිරේක වාසිය නම්, වැඩ කිරීමේ-රෙපෝ හි වින්‍යාසය තුළ යතුරු මාර්ගය කේතනය කර ඇති හෙයින්, එය ආරම්භක ක්ලෝන සහ පසුව ලබා ගැනීම / තල්ලු කිරීම යන දෙකෙහිම එකම යතුර භාවිතා කරනු ඇත.
ඇඩම් ෆ්‍රැන්කෝ

2
වාව්! මේක නියමයි, මේ ගැන දැනගෙන හිටියේ නැහැ. කළමනාකරණයට අමතර කරදර වළක්වා ගැනීම සඳහා පිළිතුරට ස්තූතියි, රූකඩ පරිසරවලද ප්‍රයෝජනවත් .ssh/configවේ. +1!
gf_

1
මෙම විසඳුම --recursive ධජය සමඟ එකට ක්‍රියා නොකරයි. නිශ්චිත යතුර භාවිතයෙන් උප මොඩියුල ලබා නොගන්නා අතර ඒවා සත්‍යාපනය අවශ්‍ය නම් අසමත් වේ.
ඩැනියෙල් ටෙස්ටා

1
සෑම උප මොඩියුලයක්ම සම්පූර්ණයෙන්ම වෙනස් ගබඩාවක් වන අතර ඒවායේ දුරස්ථ කට්ටලයක් ඇත. ඔබේ පහසුව සඳහා ඒවා Git විසින් එකට බැඳී ඇත, නමුත් කිසිදු ආකාරයකින් උප මොඩියුලයක් සඳහා දුරස්ථ මාපිය ගබඩාවේ ඇති ඒවා සමඟ බැඳී නොමැත. දෙමව්පියන් වැඩ කිරීමට පුනරාවර්තනය සඳහා ඔබ එක් එක් උප මොඩියුලයේ extප්‍රවාහනය භාවිතා කරමින් දුරස්ථය සැකසිය යුතු යැයි මම බිය වෙමි .
ෆ්ලේවියොව්ස්

2
ඔබට පහත දෝෂය හමු වුවහොත් fatal: transport 'ext' not allowed, ඔබ හරහා ext ප්‍රොටෝකෝලය සුදු ලැයිස්තු ගත කළ export GIT_ALLOW_PROTOCOL=extයුතුය. මූලික වශයෙන්, git-remote-ext දුරස්ථ සහායකයා ("ext :: ssh example.com% S foo / repo" URL වලට සහය දක්වයි) අත්තනෝමතික විධාන ක්‍රියාත්මක කිරීමට ඉඩ දෙයි. මෙය සාමාන්‍යයෙන් කිසි විටෙකත් කරදරයක් නොවේ, මන්ද පරිශීලකයා සෑම විටම ඔවුන් git වෙත යවන URL ය දැක විශ්වාස කරයි. කෙසේ වෙතත්, gitmododles, .gitmodules ගොනුව හරහා, අත්තනෝමතික git URL ලබා ගැනීමට සේවාදායකයාගෙන් ඉල්ලා සිටීමට ප්‍රහාරකයාට ඉඩ දෙන්න. hackerone.com/reports/104465
ගොමිනෝ

17

මා සමඟ කළ අරගලයෙන් පසු මා $GIT_SSHවෙනුවෙන් වැඩ කළ දේ බෙදා ගැනීමට මම කැමතියි.

මගේ උදාහරණ හරහා මම හිතන්නේ ඔබේ පෞද්ගලික යතුර ඔබ සතුව ඇති බවයි/home/user/.ssh/jenkins

වළක්වා ගැනීමට දෝෂයකි: GIT_SSH අගයට විකල්ප ඇතුළත් වේ

$ export GIT_SSH="ssh -i /home/user/.ssh/jenkins"

හෝ ගොනුවක් ලෙස අගය ක්‍රියාත්මක කිරීමට git උත්සාහ කරන බැවින් හෝ ඒ හා සමාන කිසිවක් අසමත් වේ . එම හේතුව නිසා, ඔබට පිටපතක් සෑදිය යුතුය.

Example GIT_SSH ස්ක්‍රිප්ටයේ ක්‍රියාකාරී උදාහරණය /home/user/gssh.sh

පිටපත පහත පරිදි ක්‍රියාත්මක වේ:

$ $GIT_SSH [username@]host [-p <port>] <command>

නියැදි ස්ක්‍රිප්ට් වැඩ කිරීම පහත පරිදි විය හැකිය:

#!/bin/sh
ssh -i /home/user/.ssh/jenkins $*

මෙම සටහන $*අවසන් වන විට, එය එහි වැදගත් කොටසක් වේ.

ඔබගේ සුපුරුදු වින්‍යාස ගොනුවේ ඇති ඕනෑම දෙයක් සමඟ ගැටුමක් ඇතිවීම වළක්වන ආරක්ෂිත විකල්පයක් වුවද (භාවිතා කිරීමට වරාය පැහැදිලිව සඳහන් කිරීම):

#!/bin/sh
ssh -i /home/user/.ssh/jenkins -F /dev/null -p 22 $*

ස්ක්‍රිප්ට් එක ඇතැයි උපකල්පනය කරමින් /home/user/gssh.sh, ඔබ එසේ කළ යුත්තේ:

$ export GIT_SSH=/home/user/gssh.sh

සියල්ල ක්‍රියාත්මක වනු ඇත.


ස්තූතියි. සටහන් කර ගන්න: පාස්-ත්‍රූ තර්ක සඳහා $ * වෙනුවට "$ @" භාවිතා කරන්න, තර්ක වල සුදු අවකාශය අඩංගු වන විට කලින් නිවැරදිව හැසිරේ.
Piotr Findeisen

IotPiotrFindeisen ඔබේ සටහනට ස්තූතියි. කෙසේ වෙතත්, මට එය මුළුමනින්ම තේරෙන්නේ නැත - zsh හි එය අවකාශය සමඟ නූල් එක කැබැල්ලක තබා ගැනීමට මට උපකාරී වේ, නමුත් කඩිනමින් නොවේ. ඔබට තවත් මට කියන්න පුළුවන්ද? කිසියම් වෙනස් කිරීමක් අන්ධ ලෙස එකතු කිරීමට මට අවශ්‍ය නැත.
Jan Vlcinsky

ඔබේ පිළිතුරේ පළමු භාගය ඉවත් කළ යුතුය. ක්‍රියා නොකරන විසඳුමක් ගැන කිසිවෙකු උනන්දු නොවන අතර, නිවැරදි පිළිතුර පතුලේ අපැහැදිලි වන කියවීම අපතේ යයි.
සෙරින්

ErCerin ඔබ "වළක්වා ගැනීමේ දෝෂය" ඉවත් කිරීමට අදහස් කරන්නේ නම් මම එය එහි තබා ගන්නෙමි. එය වළක්වා ගැනීම සඳහා පොදු අන්තරායන් බෙදා ගන්නා අතර එය ඉතා කෙටි වේ. මට විශ්වාසයි, යමෙක් සියලු දේ විචල්‍යයට ලබා දීමෙන් විසඳුම ප්‍රශස්ත කිරීමට උත්සාහ කරයි (මෙය මට සිදු විය), එබැවින් මම සාර්ථකත්වයේ මාවත කෙටි කිරීමට උත්සාහ කළෙමි.
Jan Vlcinsky

7

ඔබේම එතීම නිර්මාණය කරනවා වෙනුවට ඔබට ssh-ident භාවිතා කළ හැකිය.

ඔබට වැඩිදුර කියවිය හැකිය: https://github.com/ccontavalli/ssh-ident

පළමු වරට අවශ්‍ය වූ විට, බහු පිවිසුම් සැසි, එක්ස්ටර්ම් හෝ එන්එෆ්එස් හවුල් නිවාස සමඟ වුවද එය ඉල්ලුමට අනුව ssh යතුරු පටවනු ලැබේ.

ඉතා කුඩා වින්‍යාස ගොනුවක් සමඟ, ඔබට ස්වයංක්‍රීයව විවිධ යතුරු පැටවිය හැකි අතර ඔබ කළ යුතු දේ මත පදනම්ව ඒවා විවිධ නියෝජිතයන් තුළ (නියෝජිත ඉදිරියට යැවීම සඳහා) වෙන් කළ හැකිය.


6

මට වෙනම ගිතුබ් ගිණුමක් අවශ්‍ය සේවාදායකයෙක් සිටියේය. එබැවින් මට මෙම එක් ව්‍යාපෘතියක් සඳහා වෙනම යතුරක් භාවිතා කිරීමට අවශ්‍ය විය.

මගේ විසඳුම වූයේ මෙය මගේ .zshrc / .bashrc වෙත එකතු කිරීමයි:

alias infogit="GIT_SSH_COMMAND=\"ssh -i ~/.ssh/id_specialkey\" git $@"

මට එම ව්‍යාපෘතිය සඳහා git භාවිතා කිරීමට අවශ්‍ය වූ විට මම "infogit" වෙනුවට git භාවිතා කරමි:

infogit commit -am "Some message" && infogit push

මට නම් මතක තබා ගැනීම පහසුය.


6

එබැවින් මම GIT_SSH env විචල්‍යය සකසා ඇත $HOME/bin/git-ssh.

මගේ repo වින්‍යාසය භාවිතා කිරීමට කුමන ssh අනන්‍යතාවය නියම කර ඇත්දැයි යන්න සඳහා, මගේ ~/bin/git-sshගොනුව මෙයයි:

#!/bin/sh
ssh -i $(git config --get ssh.identity) -F /dev/null -p 22 $*

එවිට මට ගෝලීය git වින්‍යාස සැකසුමක් ඇත:

$ git config --global ssh.identity ~/.ssh/default_id_rsa

ඕනෑම git නිධියක් තුළ මට දේශීය ssh.identitygit වින්‍යාස අගයක් සැකසිය හැකිය :

$ git config --local ssh.identity ~/.ssh/any_other_id_rsa

වොයිලා!

ඔබට එක් එක් අනන්‍යතාවය සඳහා වෙනස් ඊමේල් ලිපිනයක් තිබිය හැකි නම්, එය වඩාත් සරල වේ, මන්ද ඔබට ඔබේ යතුරු ඔබගේ ඊමේල් ලිපිනවලට පසුව නම් කළ හැකි අතර පසුව git config's user.email මඟින් යතුරු තේරීම මේ ආකාරයෙන් ධාවනය කරන්න ~/bin/git-ssh:

#!/bin/sh
ssh -i $HOME/.ssh/$(git config --get user.email) -F /dev/null -p 22 $*

3

මගේ විසඳුම මෙයයි:

පිටපතක් සාදන්න:

#!/bin/bash
KEY=dafault_key_to_be_used
PORT=10022 #default port...
for i in $@;do
   case $i in
    --port=*)
        PORT="${i:7}";;
    --key=*)KEY="${i:6}";;
   esac
done
export GIT_SSH_COMMAND="ssh -i $HOME/.ssh/${KEY} -p ${PORT}"
echo Command: $GIT_SSH_COMMAND

ඔබ var run වෙනස් කළ යුතු විට:

. ./thescript.sh [--port=] [--key=]

අමතර තිත අමතක කරන්න එපා !! මෙමඟින් ස්ක්‍රිප්ට් මඟින් පරිසරය වෙනස් වේ !! --key සහ --port විකල්ප වේ.


3

සාමාන්යයෙන්, ඔබට මේ සඳහා භාවිතා කිරීමට අවශ්යය ~/.ssh/config. සේවාදායක ලිපිනයන් ඔබට ඒවා සඳහා භාවිතා කිරීමට අවශ්‍ය යතුරු සමඟ සරලව යුගල කරන්න:

Host github.com
  IdentityFile ~/.ssh/id_rsa.github
Host heroku.com
  IdentityFile ~/.ssh/id_rsa.heroku
Host *
  IdentityFile ~/.ssh/id_rsa

Host *ඕනෑම සේවාදායකයක් දක්වයි, එබැවින් භාවිතා කිරීමට ~/.ssh/id_rsaපෙරනිමි යතුර ලෙස සැකසීමට මම එය භාවිතා කරමි.


3

මම ellshellholic සහ මෙම SO නූල් තේක්ක කිහිපයක් සමඟ ගොඩනඟමි . මම උදාහරණයක් ලෙස GitHub භාවිතා කරන අතර ඔබට පෞද්ගලික යතුරක් ඇති බව උපකල්පනය කරමි ~/.ssh/github(එසේ නොමැතිනම් මෙම SO නූල් බලන්න ) සහ ඔබ ඔබේ GitHub පැතිකඩට පොදු යතුර එක් කළ බව උපකල්පනය කරන්න (එසේ නොමැතිනම් GitHub හි උදව් බලන්න ).

අවශ්‍ය නම්, නව SSH වින්‍යාස ගොනුවක් සාදන්න ~/.ssh/configසහ අවසර 400 දක්වා වෙනස් කරන්න

touch ~/.ssh/config
chmod 600 ~/.ssh/config

මෙය ~/.ssh/configගොනුවට එක් කරන්න :

Host github.com
    IdentityFile ~/.ssh/github
    IdentitiesOnly yes

ඔබට දැනටමත් දුරස්ථ සැකසුමක් තිබේ නම්, ඔබට එය මකා දැමීමට අවශ්‍ය විය හැකිය, එසේ නොමැතිනම් පරිශීලක නාමය සහ මුරපදය සඳහා ඔබෙන් විමසනු ඇත:

git remote rm origin

ඉන්පසු git ගබඩාවට දුරස්ථයක් එක් කර පරිශීලක නාමයට පෙර මහා බඩවැලේ සටහන් කරන්න:

git remote add origin git@github.com:user_name/repo_name.git

එවිට git විධාන සාමාන්‍යයෙන් ක්‍රියාත්මක වේ, උදා:

git push origin master
git pull origin 

SOHeyWatch මෙම SO නූලෙහි IdentitiesOnly yesඑක් එක් ප්‍රොටෝකෝලය සඳහා පෙරනිමි ගොනු නාමයට ගැලපෙන හැඳුනුම් ගොනුව යැවීමේ SSH පෙරනිමි හැසිරීම වැළැක්වීම සඳහා එකතු කිරීමට යෝජනා කළේය . වැඩි විස්තර සහ යොමු කිරීම් සඳහා එම නූල බලන්න.


මෙය මගේ වැරැද්දයි: "ඔබට දැනටමත් දුරස්ථ සැකසුමක් තිබේ නම් ...". ගොඩක් ස්තුතියි!!!
ඇලන් ඇන්ඩ්‍රේඩ්

පොදු වැරැද්ද --- මෙය පිළිතුරයි
ගොඩාඩ්

2

භාවිතා ssh-agentකර ssh-addවිධාන කරන්න.

# create an agent
ssh-agent

# add your default key
ssh-add ~/.ssh/id_rsa

# add your second key
ssh-add ~/.ssh/<your key name>

ඉහත විධානයන් ක්‍රියාත්මක කිරීමෙන් පසුව, ඔබට යතුරු දෙකම එකම වේලාවක භාවිතා කළ හැකිය. ටයිප් කරන්න

git clone git@github.com:<yourname>/<your-repo>.git

ඔබේ ගබඩාව ක්ලෝන කිරීමට.

ඔබ ඔබේ යන්ත්‍රය නැවත ආරම්භ කිරීමෙන් පසු ඉහත විධානය ක්‍රියාත්මක කළ යුතුය.


කරුණාකර මට නියෝජිතයෙකු නිර්මාණය කරන්නේ කෙසේද යන්න ඇතුළු ක්‍රියාවලිය පැහැදිලි කරන්න
ශ්‍රීකෘෂ්නා

2

ඔබට විවිධ යතුරු සමඟ එකම ධාරකයට සම්බන්ධ වීමට අවශ්‍ය නම් ඔබට එය සාක්ෂාත් කරගත හැක්කේ:

  1. වින්යාසගත ~/.ssh/configවිවිධ සත්කාරක නමුත් එම ධාරක සමග.
  2. සුදුසු ධාරකය භාවිතා කර ඔබේ රෙපෝව ක්ලෝන කරන්න.

උදාහරණයක්:

~/.ssh/config

Host work
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa_work
 User git

Host personal
 HostName bitbucket.org
 IdentityFile ~/.ssh/id_rsa_personal
 User git

එවිට ඒ වෙනුවට වැනි ඔබේ ප්රතිමිලදී උත්සහය:

git clone git@bitbucket.org:username/my-work-project.git
git clone git@bitbucket.org:username/my-personal-project.git

ඔබ කළ යුතුයි

git clone git@work:username/my-work-project.git
git clone git@personal:username/my-personal-project.git

1

ප්‍රශ්නය එය ඉල්ලා නොසිටින අතර, සඳහා පමණක් එකම ගැටලුව විසඳීමට බලාපොරොත්තු වන වෙනත් ඕනෑම කෙනෙකුට මම මෙම පිළිතුර ඇතුළත් .

ගිට්ලැබ් විසඳුම

මම ප්‍රවේශය භාවිතා කිරීමට උත්සාහ කළෙමි , නමුත් git ප්‍රලේඛනය පවා ~/.ssh/configසරල නඩුවට වඩා වැඩි යමක් සඳහා නිර්දේශ කරයි . මගේ නඩුව මම තල්ලු කරන්නේ සේවාදායකය - මම නිශ්චිත පරිශීලක ලෙස එසේ කිරීමට අවශ්ය - ඇත්තෙන්ම විසින් අර්ථ ඇති තුළ නොව පරිශීලක නාමය git. ක්‍රියාත්මක කිරීමෙන් පසු මම පහත සඳහන් දෑ ඉටු කරමි.

~/myrepo> git mycommit -m "Important Stuff"
~/myrepo> git mypush
[proceed to enter passphrase for private key...]

පිහිටුවීම

මගේ නඩුවේ ඔබේ පිහිටීම සිහිපත් කරන්න /myfolder/.ssh/my_gitlab_id_rsa.

මෙහි ඇතුළත් කිරීමක් එක් කරන්න ~/.ssh/config:

Host gitlab-delegate
    HostName gitlab.mydomain.com
    User git
    IdentityFile /myfolder/.ssh/my_gitlab_id_rsa
    IdentitiesOnly yes

මෙම එක් කරන්න දී ~/.gitconfig:

mypush = "!f() { \
           path=$(git config --get remote.origin.url | cut -d':' -f2); \
           branch=$(git rev-parse --abbrev-ref HEAD); \
           git remote add gitlab_as_me git@gitlab-delegate:$path && \
           git push gitlab_as_me $branch && \
           git pull origin $branch; \
           git remote remove gitlab_as_me; \
         }; f"

ප්‍රසාද දීමනාවක් ලෙස, මෙම සමඟ විශේෂිත පරිශීලකයෙකු ලෙස මම මෙම සත්කාරකයේම මගේ කැපවීම් සිදු කරමි :

mycommit = "!f() { \
             git -c "user.name=myname" -c "user.email=myname@mysite.com" commit \"$@\"; \
           }; f"

පැහැදිලි කිරීම

ඉහත සියල්ලම අදාළ දුරස්ථය යැයි උපකල්පනය කරන originඅතර අදාළ ශාඛාව දැනට පරීක්ෂා කර ඇත. යොමු කිරීම සඳහා මා අවධානය යොමු කළ යුතු අයිතම කිහිපයකට දිව ගියෙමි:

  • විසඳුමට නව දුරස්ථයක් නිර්මාණය කිරීම අවශ්‍ය වන gitlab_as_meඅතර, අමතර දුරස්ථය මගේ ලොග් ගසෙහි එල්ලී තිබෙනු දැකීමට මා අකමැති වූ අතර එය අවසන් වූ පසු මම එය ඉවත් කරමි
  • දුරස්ථ නිර්මාණය කිරීම සඳහා, පියාසර තහනම් මත දුරස්ථ URL එක උත්පාදනය කිරීමට අවශ්යතාවක් තිබෙනවා - gitlab පිළිබඳ පැමිණිල්ලේ දී මෙම සරල bash අත්පත් කර ගත්තේ
  • gitlab_as_meඔබට තල්ලුවක් සිදු කරන විට ඔබ තල්ලු කරන්නේ කුමන ශාඛාවද යන්න පිළිබඳව නිශ්චිත විය යුතුය
  • තල්ලුව සිදු කිරීමෙන් පසු ඔබේ දේශීය originදර්ශකය ගැලපීම සඳහා "යාවත්කාලීන" කළ යුතුය gitlab_as_me(මෙය git pull origin $branchසිදු කරයි)

1

ඔබට බහු git ගිණුමක් ඇති විට ඔබට වෙනස් ssh යතුරක් අවශ්‍ය වේ

Ssh යතුර ජනනය කිරීම සඳහා ඔබ එකම පියවරක් අනුගමනය කළ යුතුය, නමුත් ඔබ වග බලා ගන්න

ssh-keygen -t ed25519 -C "your-email-id@gmail.com" 

ඔබට සුරැකීමට අවශ්‍ය මාර්ගය ඇතුළත් කරන්න (උදා: my-pc / Desktop / .ssh / ed25519)

ඔබගේ ගිට්ලැබ් වෙත පොදු යතුර එක් කරන්න (gitlab වෙත ssh යතුර එකතු කරන්නේ කෙසේද )

පහත දැක්වෙන කොමන්ඩ් භාවිතයෙන් ඔබට නව ssh අනන්‍යතාවයක් තිබිය යුතුය

ssh-add ~/my-pc/Desktop/.ssh/ed25519

(1) ඔබ යමෙකු හෝ යමක් උපුටා දක්වනවාද? එසේ නම්, කරුණාකර මූලාශ්‍රය හඳුනා ගන්න. එසේ නොවේ නම්, කරුණාකර උපුටා දැක්වීම් ආකෘතිකරණය භාවිතා නොකරන්න. (2) “ed25519” යනු කුමක්ද? ……………………………………………………………………………………………………………….  ඔබේ පිළිතුර වඩාත් පැහැදිලි සහ සම්පූර්ණ කිරීමට සංස්කරණය කරන්න.
ස්කොට්

1
    # start :: how-to use different ssh identity files

    # create the company identity file
    ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
    # save private key to ~/.ssh/id_rsa.corp, 
    cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys

    # create your private identify file
    ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
    # save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
    cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys

    # clone company internal repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@git.in.corp.com:corp/project.git

    export git_msg="my commit msg with my corporate identity, explicitly provide author"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 
    # and verify 
    clear ; git log --pretty --format='%h %ae %<(15)%an ::: %s

    # clone public repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@github.com:acoolprojectowner/coolproject.git

    export git_msg="my commit msg with my personal identity, again author "
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push ; 
    # and verify 
    clear ; git log --pretty --format='%h %ae %<(15)%an ::: %s

    # stop :: how-to use different ssh identity files

0

මම git අනුවාදය 2.16 භාවිතා කරන අතර මට එක ස්ක්‍රිප්ට් කැබැල්ලක් අවශ්‍ය නොවේ.

  • මගේ පුද්ගලික යතුර .ssh / id_rsa වෙත පිටපත් කළා
  • අවසර 600 ක් ලෙස සකසන්න

Git ස්වයංක්‍රීයව යතුර කියවයි. මම කිසිවක් අසන්නේ නැති අතර එය දෝෂයක් නොදක්වයි. හොඳින් ක්‍රියාත්මක වේ.


1
ප්‍රශ්නය “ ~/.sshබහලුමේ පුද්ගලික යතුරු කිහිපයක් ඇති පද්ධතියක්” ගැන බව ඔබ දුටුවාද ?
ස්කොට්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.