지정된 도메인에 대한 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.
- 새기
.gitconfig철다하 아래에 파일을 합니다.~/work:
[core]
sshCommand = "ssh -i ~/.ssh/workrsa"
- 구성에서 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
'programing' 카테고리의 다른 글
| 수정 시 Git 커밋 작성자 날짜 업데이트 (0) | 2023.05.04 |
|---|---|
| index.ts는 모두 무엇에 사용됩니까? (0) | 2023.05.04 |
| Azure 앱 서비스 대 Azure 서비스 패브릭 (0) | 2023.05.04 |
| 프로토콜을 어레이 유형 및 기능 매개 변수로 신속하게 사용 (0) | 2023.05.04 |
| 서비스 대리자가 xcode 8 오류를 거부함(SBMain Workspace) (0) | 2023.05.04 |