programing

지정된 도메인에 대한 git 푸시에 대한 SSH 키 지정

easyjava 2023. 5. 4. 20:43
반응형

지정된 도메인에 대한 git 푸시에 대한 SSH 키 지정

다음과 같은 사용 사례가 있습니다.저는 할 수 있기를 바랍니다.git@git.company.com:gitolite-admin의 키 gitolite-admin내가 밀고 싶은 동안에git@git.company.com:some_repo내 개인 키를 사용합니다. 나는 AFAIK를 사용하여 수 , 나는이사수없다습니해.~/.ssh/config두 경우 모두 사용자 이름과 서버 이름이 동일하기 때문입니다.는 개인 키를 사용하기 에 개인키주사로때에있정다습어니되의문에 .~/.ssh/config위해서git@git.company.com싱글에 사용되는 키를 오버라이드하는 방법을 아는 사람?git호출?

(단, gitolite는 키를 기반으로 푸시를 수행하는 사람을 구분하므로 액세스, 소유권 및 감사 측면에서 user@server 문자열이 서로 다른 사용자에 대해 동일한 것은 문제가 되지 않습니다.)

하더라도 사자와호동에도수구있서다습니분할라일스에서 구별할 수.~/.ssh/config예를 들어, 구성이 다음과 같은 경우:

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

그럼그사용요세하냥▁use요세하▁then용▁just사를 사용합니다.gitolite-as-alice그리고.gitolite-as-bobURL에 있는 호스트 이름 대신:

git remote add alice git@gitolite-as-alice:whatever.git
git remote add bob git@gitolite-as-bob:whatever.git

메모

.IdentitiesOnly yes기본 ID의 사용을 방지합니다.이름과 구성 ("첫 번째 승리를 따르는 옵션)과 달리 id 파일이 됩니다.IdentityFile시도할 ID 목록에 옵션이 추가됩니다.참조: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807

다을사리구성을 사용하여 git config

git config --add --local core.sshCommand 'ssh -i <<<PATH_TO_SSH_KEY>>>'

이것은 로컬 리포지토리에만 적용됩니다.

Git을 사용할 수 있습니다.GIT_SSH_COMMANDGit 저장소 아래에 있는 터미널에서 이를 실행합니다.

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

를 바꿉니다.~/.ssh/your_private_key사용할 SSH 개인 키의 경로를 사용합니다.명령을 할 수 예: " " " " " " " " " " " " " "git submodule update --init)와 같은 다른 사람들에게.git pull,git fetch 타기.

Mark Longair가 위에서 제공한 방법에 대한 대안적인 접근 방식은 대체 SSH 키와 함께 모든 원격에서 git 명령을 실행할 별칭을 사용하는 것입니다.기본적으로 git 명령을 실행할 때 SSH ID를 전환하는 것입니다.

다른 답변에서 호스트 별칭 접근 방식과 관련된 이점:

  • 다음을 지정할 수 없는 경우에도 모든 git 명령 또는 별칭과 함께 작동합니다.remote노골적으로
  • 각 클라이언트 시스템의 리포지토리당 한 번이 아니라 클라이언트 시스템당 한 번만 설정하면 되므로 많은 리포지토리에서 작업하기가 더 쉽습니다.

나는 몇 개의 작은 스크립트와 작은 별칭을 사용합니다.admin그런 식으로 할 수 있습니다. 예를 들어:

git admin push 

키를 ."("admin") SSH"를 사용합니다. 여러분은 할 수 (단순히 명령만 사용하는 것이 .push 이합니다. 이 별칭을 사용합니다.당신은 할 수도 있습니다.git admin clone ... "admin" 수 리포지토리를 복제합니다.

1단계: 대체 SSH 키를 만들고, 다른 사람의 컴퓨터에서 암호를 설정하는 경우 선택적으로 암호를 설정합니다.

2단계: SSH를 사용하지만 기본 SSH 키가 아닌 지정된 SSH 키를 사용하는 "ssh-as.sh "이라는 스크립트를 만듭니다.

#!/bin/bash
exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "$@"

3단계: 지정된 SSH 키를 사용하여 git 명령을 실행하는 "git-as.sh " 스크립트를 만듭니다.

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

4단계: 별칭을 추가합니다(아래 "PATH_TO_SCRIPTS_DIR"에 적합한 것을 사용).

# 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"

자세한 내용은 http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/ 에서 확인하십시오.

저는 몇 가지 기술을 결합한 다른 답변 읽기를 기반으로 다음 접근 방식을 Github과 함께 크립팅하고 테스트했습니다.

  • 올바른 SSH 구성
  • git URL 다시 쓰기

이 접근 방식의 장점은 일단 설정하면 원격 URL을 변경하거나 다른 방식으로 복제할 필요가 없는 등 추가 작업이 필요하지 않다는 것입니다. URL을 다시 작성하면 모든 작업이 수행됩니다.

~/.ssh/config

# Personal GitHub
Host github.com
  HostName github.com
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/github_id_rsa

# Work GitHub
Host github-work
  HostName github.com
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/work_github_id_rsa

Host *
  IdentitiesOnly yes

~/.gitconfig

[user]
    name = My Name
    email = personal@personal.email

[includeIf "gitdir:~/dev/work/"]
    path = ~/dev/work/.gitconfig

[url "github-work:work-github-org/"]
    insteadOf = git@github.com:work-github-org/

~/dev/work/.gitconfig

[user]
    email = work@work.email

모든 작업 저장소를 다른 곳에서 ~/dev/work 및 개인 정보로 보관하는 한 git는 서버에 풀/클론/push를 수행할 때 올바른 SSH 키를 사용하고 모든 커밋에 올바른 전자 메일 주소를 첨부합니다.

참조:

git 2.10 이상에서는 gitconfig sshCommand 설정을 사용할 수도 있습니다.문서 상태:

이 변수가 설정된 경우 git fetch 및 git push는 원격 시스템에 연결해야 할 때 ssh 대신 지정된 명령을 사용합니다.명령은 GIT_SSH_COMMAND 환경 변수와 동일한 형식이며 환경 변수가 설정되면 재정의됩니다.

다음과 같이 사용할 수 있습니다.git config core.sshCommand "ssh -i ~/.ssh/[insert_your_keyname]

명령을 하기 때문에 작동하지 않는. 이 에는 ssh_config 명령을 사용해 보십시오.ssh -i ~/.ssh/[insert_your_keyname] -F /dev/nullssh_config를 사용하지 않습니다.

특정 키를 즉시 사용하는 방법

GIT_SSH_COMMAND='ssh -i $HOME/.ssh/id_ed25519 -o IdentitiesOnly=yes -F /dev/null' git push origin c13_training_network

설명:

  • 푸시를 수행하기 전의 로컬 ENV 변수
  • -i합니다.
  • -F는 이 로 빈 을 지정합니다.

하나의 유닉스 기반 시스템(리눅스, BSD, Mac OS X), 기본 ID는 $HOME/.ssh 디렉터리에 저장됩니다. private key: $HOME/.ssh/id_rsa public key: $HOME/.ssh/id_rsa.pub 를 할 때ssh을 지정할 수 .-i기본 개인 키를 사용하여 원격 시스템으로 인증합니다.

사용할 다른 개인 키(예: $HOME/.ssh/deploy_key)가 있는 경우 사용해야 합니다.ssh -i ~/.ssh/deploy_key ...

짜증나요.$HOME/.bash_profile에 다음 행을 추가할 수 있습니다. ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa

사할때마를 사용할 마다.ssh또는git또는scp)로 표시됩니다.ssh도 없습니다.-i더이상.

$HOME/.bash_profile 파일에서 원하는 만큼 키를 추가할 수 있습니다.

또 다른 방법은 ssh-ident를 사용하여 ssh ID를 관리하는 것입니다.

현재 작업 디렉터리, ssh 옵션 등에 따라 다른 키를 자동으로 로드하고 사용합니다.즉, 작업/디렉토리와 개인/디렉토리를 쉽게 가질 수 있으며 SSH로 다른 키와 ID를 투명하게 사용할 수 있습니다.

나는 Win7에서 Git Bash를 사용하고 있습니다.다음은 저에게 효과가 있었습니다.

~/.ssh/config 또는 c:/users/[your_user_name]/.ssh/config에 구성 파일을 생성합니다.파일에 다음을 입력합니다.

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

호스트는 단순히 호스트의 "이름"이나 참조가 아닌 URL이어야 합니다.예를들면,

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

경로는 /c/users/[user_name]/.... 형식으로도 작성할 수 있습니다.

지오다노 스칼조가 제공하는 솔루션도 훌륭합니다.https://stackoverflow.com/a/9149518/1738546

이미 기본 ssh 키 구성이 있지만 특정 저장소에 대해 다른 구성을 사용하려면 다음과 같이 해야 합니다.

git config core.sshCommand "ssh -i ~/.ssh/github-personal -o IdentitiesOnly=yes -F /dev/null"

사용할 수 있는 단일 가능성~/.ssh/config사용하는 것입니다.Match신에제한 Host 특히 특제Match Exec셸 명령을 호출하여 선언 적용 여부를 결정합니다.에서는 다음할 수 . bash 서다사수용있습다니할령는을.

[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]

것은를사용합니다이▁the다▁bash니를 사용합니다.[두 문자열이 동일한지 확인하는 명령입니다.이 경우에는 문자열이git@git.company.com:gitolite-admin에 얻출일다니에서 얻은 합니다.$(git config --get remote.origin.url)''지휘권

셸이 있는 리포지토리를 식별하는 다른 명령을 사용할 수 있습니다.이것이 작동하기 위해서는 중요합니다.$SHELL셸에 , 에는 의셸정변수된의나, 경우의에당신./bin/bash인 예는 과 같습니다.~/.ssh/config:

Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
  IdentityFile ~/.ssh/gitolite-admin
  IdentitiesOnly yes
  ForwardAgent no
  ForwardX11 no
  ForwardX11Trusted no

Match Exec "[ git@git.company.com:some_repo = $(git config --get remote.origin.url)'' ]"
  IdentityFile ~/.ssh/yourOwnPrivateKey
  IdentitiesOnly yes
  ForwardAgent no
  ForwardX11 no
  ForwardX11Trusted no

이 예에서 저는 다음과 같이 가정했습니다.~/.ssh/yourOwnPrivateKey 개인 키가 있습니다.~/.ssh/gitolite-admin 있습니다.gitolite-admin나는 포함시켰습니다.IdentitiesOnly yesMark Longair가 언급한 Git 서버에 하나의 키만 제공되도록 하는 선언입니다.다른 선언은 git에 대한 표준 ssh 옵션일 뿐입니다.

개의 이 있는 경우 이할 수 .some_repo다른 키와 함께 사용할 수 있습니다.에 여러 가 있는 git@git.company.com그리고 그들 대부분은 사용합니다.~/.ssh/yourOwnPrivateKey이 키를 호스트의 기본값으로 포함하는 것이 더 합리적입니다.이 경우에는~/.ssh/config다음과 같습니다.

Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
  IdentityFile ~/.ssh/gitolite-admin
  IdentitiesOnly yes

Host git.company.com
  IdentityFile ~/.ssh/yourOwnPrivateKey
  IdentitiesOnly yes
  ForwardAgent no
  ForwardX11 no
  ForwardX11Trusted no

순서가 중요하고 다음이 중요하다는 것에 주목하세요.Host git.company.com은 한은다나합니다야 뒤에 와야 .Match Exec둘 중 하나

말씀하신 처럼, 다사람언이듯급했이른,이▁as듯언,core.sshCommand구성을 사용하여 SSH 키 및 기타 매개 변수를 재정의할 수 있습니다.

에 다은이지름대정체키예라는 대체 .~/.ssh/workrsa다음 기간에 복제된 모든 리포지토리에 사용할 수 있습니다.~/work.

  1. 새기 .gitconfig철다하 아래에 파일을 합니다.~/work:
[core]
  sshCommand = "ssh -i ~/.ssh/workrsa"
  1. 구성에서 Git을 합니다.~/.gitconfig 추가: 메시지:
[includeIf "gitdir:~/work/"]
  path = ~/work/.gitconfig

https://stackoverflow.com/a/7927828/1306884 에서 언급한 것처럼 구성 파일을 변경하는 것 외에 다른 SSH 키를 사용해야 하는지 확인하려면 활성 SSH ID를 제거하고 다시 로드해야 할 수도 있습니다.

Mac에서 다음을 수행합니다.

ssh-add -D
ssh-add ~/.ssh/id_rsa_one_that_you_want_to_use_instead

두명령어를 하여, URL을 하여 " " " " " " " " " " " " " " " " " " 에 .Host의 ./config 파일을 다른 에 대해 다른 키를 할 수 . ssh/config 파일은 SSH 파일입니다.

를 들어, 들면를의 경우입니다.Host work.github.com사용하다work.github.com할 때 할 수 있습니다.git@work.github.com:your/repository.git.

Windows에서 Git 버전의 ssh를 사용하는 경우 ssh 구성의 ID 파일 행은 다음과 같습니다.

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

/c을 위한 것입니다.c:

확인하기, bash do.

cd ~/.ssh
pwd 

기본 호스트 구성을 제거하거나 주석을 달아야 할 수 있습니다.

파일 구성 키 ssh에서 가장 많이 지정한 항목:

# Default GitHub user
Host one
 HostName gitlab.com
 User git
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/key-one
 IdentitiesOnly yes

#two user
Host two
 HostName gitlab.com
 User git
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/key-two
 IdentitiesOnly yes

참고: 디렉터리에 대해 이전 답변에서 제안한 git 구성을 적용하는 방법이 있습니다.

제 경우, 모든 프로젝트는~/work/그래서 다음과 같이 gitconfig를 업데이트했습니다.

# ~/.gitconfig
...

[includeIf "gitdir:~/work/**"]
  path = "~/work/.gitconfig"
# ~/work/.gitconfig
[user]
  email = amr@work.com
  name = Amr Awad
  sshCommand = ssh -i ~/.ssh/work

그리고 이제 내부의 모든 저장소.~/work/ 키를 합니다.~/.ssh/work각 레포를 별도로 구성할 필요가 없습니다.

간단한 접근법은 다음과 같습니다.

-로컬 루트 깃 폴더에서.

- 로컬 저장소의 현재 인증 방법 HTTPS 또는 SSH 유형을 확인합니다.

   git remote -v

 Example using HTTPS:
 origin  https://github.com/juantorres9/SQLite_crash_cours.git (fetch)
 origin  https://github.com/juantorres9/SQLite_crash_cours.git (push)
 Example using SSH:
 origin  git@github.com:juantorres9/SQLite_crash_cours.git (fetch)
 origin  git@github.com:juantorres9/SQLite_crash_cours.git (push)

- 아직 설정되지 않은 경우에 대비하여 원하는 인증 방법을 설정합니다.

 For setting SSH
 git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
 For setting HTTPS
 git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

- 다시 확인하고자 하는 경우 다시 확인

 git remote -v

-이제 구성된 방법으로 git push:fetch를 사용할 수 있습니다.

git push origin master

참고 마지막으로 업데이트된 공식 문서 https://docs.github.com/en/get-started/getting-started-with-git/managing-remote-repositories 를 확인하십시오.

언급URL : https://stackoverflow.com/questions/7927750/specify-an-ssh-key-for-git-push-for-a-given-domain

반응형