Пакажыце ключ SSH для гнюса штуршка для дадзенага дамена

У мяне ёсць наступны выпадак выкарыстання: Я хацеў бы быць у стане націснуць на [email protected]: gitolite-адміністратар з дапамогай сакрэтнага ключа карыстальніка gitolite-адмін , у той час як я хачу, каб націснуць на [email protected]: some_repo з дапамогай «майго ўласнага» сакрэтнага ключа. AFAIK, я не магу вырашыць гэта з дапамогай ~/.ssh/канфігурацыі , так як імя карыстальніка і імя сервера ідэнтычныя ў абодвух выпадках. Як я ў асноўным выкарыстоўваю свой уласны закрыты ключ, у мяне ёсць, што вызначана ў ~/.ssh/канфігурацыі для [email protected] . Хто-небудзь ведае спосаб, каб перавызначыць ключ, які выкарыстоўваецца для аднаго гнюса выклік?

(За выключэннем: gitolite адрознівае, хто робіць штурханне на аснове ключа, так што гэта не праблема, з пункту гледжання доступу, валодання і аўдыту, што радок карыстальнік @ сервер аднолькавая для розных карыстальнікаў.)

279

8 адказы

Нават калі карыстальнік і хост адны і тыя ж, яны па-ранейшаму можна вылучыць ~/.ssh/канфігурацыі . Напрыклад, калі ваша канфігурацыя выглядае наступным чынам:

Host gitolite-as-alice
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_rsa.alice
  IdentitiesOnly yes

Host gitolite-as-bob
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_dsa.bob
  IdentitiesOnly yes

Тады вы проста выкарыстоўваць gitolite-а-Аліса і gitolite-а-боб замест імя хаста ў вашым URL:

git remote add alice [email protected]:whatever.git
git remote add bob [email protected]:whatever.git

Нататка

You want to include the option IdentitiesOnly yes to prevent the use of default ids. Otherwise, if you also have id files matching the default names, they will get tried first because unlike other config options (which abide by "first in wins") the IdentityFile option appends to the list of identities to try. See: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807

506
дададзена
Я выкарыстоўваю акно з Git Bash. Для файла ідэнтычнасці радкі я пішу: IdentityFile ~ Дэйві/.ssh/id_rsa.davey або IdentityFile C: \ Users \ Davey \ .ssh \ id_rsa.davey ?
дададзена аўтар David West, крыніца
Не забудзьцеся дадаць HostName ў known_hosts: stackoverflow.com/questions/13363553/…
дададзена аўтар rottenoats, крыніца
Пераканайцеся, што вы дадалі свой ключ SSH выкарыстоўваючы SSH-дадаць ~/.ssh/ідэнтычнасць (Linux, Mac), у адваротным выпадку ён не будзе выкарыстоўвацца, нават калі ён паказаны ў IdentifyFile.
дададзена аўтар Tim, крыніца
Awesome, дзякуй. Я не зразумеў, што вы маглі свабодна выбраць «псеўданім» для спецыфікацыі хаста ў ~/.ssh/канфігурацыі
дададзена аўтар Confusion, крыніца
<Код> мярзотнік @ частку ў пульце дыстанцыйнага кіравання не патрабуецца, паколькі яно дадзена ў User радку канфігурацыі.
дададзена аўтар dolmen, крыніца
Вы можаце выкарыстоўваць GitHub-кейген лёгка дадаць такую ​​канфігурацыю для GitHub рахунку.
дададзена аўтар dolmen, крыніца
вялікі абыходны шлях !!! Я шукаў рашэнне для узростаў.
дададзена аўтар didando8a, крыніца
Вялікі дзякуй Ф.О. rthe ясны і вельмі карысны адказ. Я спрабаваў атрымаць гэтую працу на некаторы час і здаўся раней з здагадкай, што той жа карыстальнік павінен быў выкарыстаць файл закрытага ключа жа id_rsa.
дададзена аўтар DrCord, крыніца
Я з усіх сіл з гэтым рашэннем, пакуль я дадаў яшчэ адзін радок, якая змяшчае IdentitiesOnly ды адразу пасля радка з кодам <> IdentityFile для хаста. Здаецца, яна праходзіць па некалькіх ідэнтычнасць і адзін з тых, хто быў заблякаваны доступ да хасту.
дададзена аўтар Fitter Man, крыніца
Дзякуй таксама за гэты адказ! Адзін Гоча для мяне было тое, што IdentityFile павінен быць поўны шлях (я толькі пакласці id_rsa.rick як мой аргумент IdentityFile, і гэта не ўдалося). См ssh_config (5) чалавек старонкі для іншага сінтаксісу для IdentityFile.
дададзена аўтар rickumali, крыніца
Я ўвесь час атрымліваць адмоўлена сховішча доступу памылка з камандамі GIT, а каманды SSH працаваў. Даданне IdentitiesOnly ды лінія вырашыць гэтую праблему.
дададзена аўтар Justin Lau, крыніца
працаваць як шарм.
дададзена аўтар Gaurav, крыніца

Альтэрнатыўны падыход да адной прапанаванай вышэй Марк Longair павінен выкарыстоўваць псеўданім, які будзе працаваць любы каманда мярзотнік, на любы дыстанцыйнае, з альтэрнатыўным ключом SSH. Ідэя заключаецца ў асноўным, каб пераключыць ідэнтычнасць SSH пры выкананні каманд Git.

Перавагі ў адносінах да хост-псеўданім падыходу ў іншым адказе:

  • Ці будзе працаваць з любы Git каманды або псеўданімы, нават калі вы не можаце паказаць аддалены відавочна.
  • Лягчэй працаваць з вялікай колькасцю сховішчаў, таму што вам трэба ўсяго толькі ўсталяваць яго адзін раз на кліенцкай машыне, а не адзін раз у сховішча на кожным кліенцкім кампутары.

Я выкарыстоўваю некалькі невялікіх скрыптоў і ä GIT псеўданім адмін . Такім чынам, я магу зрабіць, напрыклад:

git admin push 

Для таго, каб націснуць па змаўчанні дыстанцыйнага кіравання з дапамогай альтэрнатывы ( «адміністратара») ключа SSH. Зноў жа, вы можаце выкарыстоўваць любую каманду (а не толькі націскной ) з гэтым псеўданімам. Можна нават зрабіць мярзотнік адмін клон ... кланаваць рэпазітар, які вы б мець доступ да выкарыстання ключа «адмін» толькі.

Step 1: Create the alternative SSH keys, optionally set a passphrase in case you're doing this on someone else's machine.

Step 2: Create a script called “ssh-as.sh” that runs stuff that uses SSH, but uses a given SSH key rather than the default:

#!/bin/bash
exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "[email protected]"

Step 3: Create a script called “git-as.sh” that runs git commands using the given SSH key.

#!/bin/bash
SSH_KEYFILE=$1 GIT_SSH=${BASH_SOURCE%/*}/ssh-as.sh exec git "${@:2}"

Step 4: Add an alias (using something appropriate for “PATH_TO_SCRIPTS_DIR” below):

# Run git commands as the SSH identity provided by the keyfile ~/.ssh/admin
git config --global alias.admin \!"PATH_TO_SCRIPTS_DIR/git-as.sh ~/.ssh/admin"

More details at: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/

53
дададзена
Вельмі добры адказ. Не забудзьцеся дадаць у падвойныя двукоссі $ @ -> "$ @" , каб быць бяспечным.
дададзена аўтар kevinarpe, крыніца
@sinelaw Ці гэта ўсё яшчэ працуе? Я атрымліваю забароне доступу ўвесь час
дададзена аўтар Alok Kumar, крыніца

Вы можаце выкарыстоўваць мярзотнік зменную асяроддзі GIT_SSH_COMMAND . Запусціць у тэрмінале пад вашым рэпазітар:

GIT_SSH_COMMAND='ssh -i ~/.ssh/your_private_key' git submodule update --init

Замяніць ~/.ssh/your_private_key са шляху SSH сакрэтнага ключа вы хочаце выкарыстаць. І вы можаце змяніць наступную каманду GIT (у прыкладзе гэта Абнаўленне мярзотнік подмодуль --init ) іншым, як мярзотнік цягнуць , мярзотнік выбаркі , і г.д.

18
дададзена
Поўны дакумент знаходзіцца на git-scm.com/docs/git#git-codeGITSSHcode; ён мае патрэбу ў <я> recentish гіт (> = 2.3. *), хоць.
дададзена аўтар Christian Ulbrich, крыніца
Дзякуй за простае рашэнне, якое не патрабуе нічога, акрамя ўстаноўкі адной зменнай асяроддзі.
дададзена аўтар Noah Sussman, крыніца

Адзін сістэмы на аснове Unix (Linux, BSD, Mac OS X), тоеснае па змаўчанні захоўваюцца ў каталогу <моцны> $ HOME/.ssh , у 2-х файлаў: <Код> закрыты ключ: $ HOME/.ssh/id_rsa адкрыты ключ: $ HOME/.ssh/id_rsa.pub Пры выкарыстанні SSH без опцыі -i , ён выкарыстоўвае сакрэтны ключ па змаўчанні для праверкі сапраўднасці з выдаленай сістэмай.

If you have another private key you want to use, for example $HOME/.ssh/deploy_key, you have to use ssh -i ~/.ssh/deploy_key ...

It is annoying. You can add the following lines in to your $HOME/.bash_profile : ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa

Такім чынам, кожны раз, калі вы выкарыстоўваеце SSH або мярзотнік або УПП (у асноўным SSH таксама), вы не павінны выкарыстоўвайце опцыю -i больш.

Вы можаце дадаць столькі ключоў, як вам падабаецца ў файле <моцны> $ HOME/.bash_profile .

10
дададзена

Іншы альтэрнатывай з'яўляецца выкарыстанне SSH-Ідэнт, каб кіраваць SSH ідэнтычнасцяў .

Ён аўтаматычна загружае і выкарыстоўвае розныя ключы, заснаваныя на бягучым працоўным каталогу, параметры SSH, і гэтак далей ... што азначае, што вы можаце лёгка мець працоўны каталог/і прыватны/каталог, які празрыста ў канчатковым выніку, выкарыстоўваючы розныя ключы і ідэнтыфікатары з SSH.

10
дададзена

Я выкарыстоўваю Git Bash на Win7. Наступныя працаваў для мяне.

Стварыце канфігурацыйны файл у ~/.ssh/канфігурацыі або з :./Карыстальнікаў/[имя_пользователя]/SSH/конф. У файле увядзіце:

Host your_host.com
     IdentityFile [absolute_path_to_your_.ssh]\id_rsa

Я мяркую, што хост павінен быць URL, а не проста «імя» або реф для вашага хаста. Напрыклад,

Host github.com
     IdentityFile c:/users/[user_name]/.ssh/id_rsa

Шлях можна таксама запісаць у/с/карыстальнікаў/[имя_пользователя]/.... фармат

The solution provided by Giordano Scalzo is great too. https://stackoverflow.com/a/9149518/1738546

7
дададзена

Пры выкарыстанні версіі Git па SSH на вокны, файл ідэнтыфікатар лініі ў SSH канфігурацыі выглядае

IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice

where /c is for c:

Для таго, каб праверыць, у Баш Git і зрабіць

cd ~/.ssh
pwd 
3
дададзена

You might need to remove (or comment out) default Host configuration .ssh/config

2
дададзена