programing

Git에서 셸 명령어를 실행할 때 사용할 개인 SSH 키를 지정하는 방법은 무엇입니까?

yellowcard 2023. 4. 10. 21:32
반응형

Git에서 셸 명령어를 실행할 때 사용할 개인 SSH 키를 지정하는 방법은 무엇입니까?

할 때 하고 싶습니다(「Da」 「Da」 「Da」 「D」 「SSH」).git 명령어를 사용합니다.

기본적으로 다음과 같습니다.

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

또는 (Ruby의 경우):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

를 본 .Net::SSH는 지정된 개인 키를 사용하지만 이것은 로컬명령어입니다.★★★★★★★★★★★★★★★★★★?

이 솔루션들 중 어느 것도 나에게 효과가 없었다.

v.@Martin v. Löwis 설정을 하겠습니다.configSSH 일 ssh ssh ssh ssh ssh 。

SSH를 .~/.ssh/config파일입니다. 제 광산 설정은 다음과 같습니다.

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

그리고 리모트 git 저장소를 추가합니다.

git remote add origin git@gitserv:myrepo.git

그리고 git 명령어는 정상적으로 동작합니다.

git push -v origin master

메모들

  • IdentitiesOnly yes는 각 프로토콜의 기본 파일 이름과 일치하는 ID 파일을 보내는 SSH 기본 동작을 방지하기 위해 필요합니다.파일명을 가진 경우~/.ssh/id_rsa해 볼 수 있는 이에요.~/.ssh/id_rsa.github이 옵션을 사용하지 않습니다.

레퍼런스

다음과 같은 것이 작동해야 합니다(orip이 제안함).

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

서브셸을 선호할 경우 다음을 시도해 볼 수 있습니다(단, 더 취약합니다).

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git은 SSH를 호출하여 환경변수로 에이전트를 찾습니다.이것에 의해, 키가 로드됩니다.

" " 를 합니다.HOME에서는, 「」만 포함한 디렉토리를 할 수 있는 에서도, 이 트릭을 할 수 .다만, 다음의 디렉토리만을 셋업 할 의향이 있는 경우,.ssh로 명기하다.HOME; 여기에는 identity.pub 또는 Identity File 설정 설정 파일이 포함됩니다.

Git 2.3.0부터는 간단한 명령어도 사용할 수 있습니다(설정 파일은 필요 없습니다).

GIT_SSH_COMMAND='ssh -i private_key_file -o IdentitiesOnly=yes' git clone user@host:repo.git

해 주세요.-o IdentitiesOnly=yes는 위의 답변에서 설명한 바와 같이 각 프로토콜의 기본 파일 이름과 일치하는 ID 파일을 전송하는 SSH 기본 동작을 방지하기 위해 필요합니다.

에 대한 다른 사람의~/.ssh/config매우 복잡합니다.을 사용하다

Host github.com
  IdentityFile ~/.ssh/github_rsa

git 2.10+ (2016년 3분기: 2016년 9월 2일 출시)를 사용하면, 다음과 같은 구성을 설정할 수 있습니다.GIT_SSH_COMMAND(Rober Jack Will의 답변에 기술된 환경 변수뿐만 아니라)

Commit 3c8ede 3 (2016년 pclouds6월 26일) by Nguynn Thai Ngcc Duy()를 참조하십시오.
(2016년 7월 19일, Junio C Hamano에 의해 합병)

변수 " " " "core.sshCommand has has has for has for for for for for for for for for for for for의 값을 지정하기 위해 가 되었습니다.GIT_SSH_COMMAND사용할 수 있습니다.

core.sshCommand:

되어 있는 는, 「」입니다.git fetch ★★★★★★★★★★★★★★★★★」git push는, 「명령어」 에, 를 사용합니다.ssh리모트 시스템에 접속할 필요가 있는 경우.
는 '동일하다'와입니다.GIT_SSH_COMMAND환경 변수가 설정되면 덮어쓰게 됩니다.

,, ,, ,, ,, ,.git pull하다

cd /path/to/my/repo/already/cloned
git config core.sshCommand 'ssh -i private_key_file' 
# later on
git pull

명령어 .git clone:

git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git

은 RSA를 .GIT_SSH_COMMAND환경변수는 Windows에서 Mattyas Kuti-Kresz,cs지적한 바와 같이 다음과 같습니다.

set "GIT_SSH_COMMAND=ssh -i private_key_file"

에는, 「」를 할 수 .-o IdentitiesOnly=yesSSH를 지정한 개인 키/공개 키로 제한하려면 다음 절차를 수행합니다.

git config core.sshCommand 'ssh -i private_key_file -o IdentitiesOnly=yes' 
# or
git -c core.sshCommand="ssh -i private_key_file -o IdentitiesOnly=yes" clone host:repo.git
# or
set "GIT_SSH_COMMAND=ssh -i private_key_file -o IdentitiesOnly=yes"

gsullins코멘트에서 다음과 같이 제안합니다..zshrc음음음음일에 、 、 。

alias git.key1="git config core.sshCommand 'ssh -i <absolute path to private key>'"

my_git_ssh_wrapper 내용:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

그런 다음 다음 키를 사용할 수 있습니다.

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git

회답과 코멘트를 정리하면, 다른 키 파일을 사용하도록 git을 설정하고, 그것을 잊어버리는 가장 좋은 방법은, Windows에서도 동작하는 같은 호스트(개인 GitHub 어카운트 및 작업용 어카운트)에 대해서 다른 유저를 서포트하는 것입니다.~/.ssh/config (오류)c:\Users\<your user>\.ssh\config하고, 복수의 「ID」, 「ID」)를

Host github.com
HostName github.com
IdentityFile /path/to/your/personal/github/private/key
User dandv

Host github-work
HostName github.com
IdentityFile /path/to/your/work/github/private/key
User workuser

다음 사용자로 사용자로 .git clone명령어를 입력합니다.

workuser , run , runfilename.git clone git@github-work:company/project.git.

문제는, 같은 호스트상에 다른 리모트저장소가 있는 경우(github.com 등), 다른 ssh 키(다른 GitHub 어카운트)를 사용해 그 리모트저장소와 대화하는 경우입니다.

그러기 위해서는:

  1. '다르다'에서 해야 합니다.~/.ssh/configfilename을 클릭합니다.

    # Key for usual repositories on github.com
    Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
    
    # Key for a particular repository on github.com
    Host XXX
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_other_rsa
    

    이렇게 하면 두 번째 키를 github.com의 새로운 알기 쉬운 이름 "XXX"와 연관지을 수 있습니다.

  2. 그런 다음 방금 정의한 이름을 사용하도록 특정 리포지토리의 원격 원본을 변경해야 합니다.

    명령 프롬프트에서 로컬 저장소 폴더로 이동하여 현재 원격 원점을 표시합니다.

    >git remote -v
    origin  git@github.com:myuser/myrepo.git (fetch)
    origin  git@github.com:myuser/myrepo.git (push)
    

    다음으로 원점을 변경합니다.

    >git remote set-url origin git@XXX:myuser/myrepo.git
    >git remote -v
    origin  git@XXX:myuser/myrepo.git (fetch)
    origin  git@XXX:myuser/myrepo.git (push)
    

    이제 밀고, 가져오고...자동으로 올바른 키를 누릅니다.

여기에 기재된 바와 같이 https://superuser.com/a/912281/607049

리포트 단위로 설정할 수 있습니다.

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

가장 빠르고 간단한 방법은 다음과 같습니다.

ssh를 사용하여 repo 복제:

git -c core.sshCommand="ssh -i ~/.ssh/<your_key>" clone git@github.com:<user>/<repo>.git

cd을 사용법

git config core.sshCommand 'ssh -i ~/.ssh/<your_key>'

동작 테스트 방법:

git --git-dir=/path/to/repo/.git pull

그래서 궁금하실 수도 있습니다.github에 .pub을 심고 개인 디렉토리가 디폴트 디렉토리에 있는 경우, 작성한 ssh 키가 왜 기능하지 않는지.

메뉴얼에서는, 문제를 명확하게 하는 커맨드를 제공하고 있습니다.ssh -vT git@github.com

출력은 git names git이 찾는 ssh목록을 보여줍니다.따라서 이러한 이름 중 하나로 키를 만들거나 위의 프로세스를 사용하여 필요한 이름을 포함할 수 있습니다.

GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key" git clone $git_repo

또는

export GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key"
git clone REPO
git push

를 IP에 ..ssh/config다음과 같이 합니다.

Host (a space separated list of made up aliases you want to use for the host)
    User git
    Hostname (ip or hostname of git server)
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_(the key you want for this repo)

Git 버전 2.10.0부터는 repo 단위 또는 글로벌하게 설정할 수 있습니다.

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -o 'IdentitiesOnly yes'"

그러면 현재 repo에 사용할 ssh 키가 지정됩니다.하려면 , 「전역」을 .--global★★★★★★ 。

GIT_SSH 환경변수로 했습니다.여기 위쪽에 있는 Joe Block의 것과 비슷하지만, 어떠한 논쟁도 처리할 수 있습니다.

파일 ~/gitwrap.

#!/bin/bash
ssh -i ~/.ssh/gitkey_rsa "$@"

그런 다음 .bashrc에서 다음을 추가합니다.

export GIT_SSH=~/gitwrap.sh

이 명령어는 repo를 클론하고 SSH 키를 영속적으로 사용하도록 설정합니다.

git clone -c "core.sshCommand=ssh -i ~/.ssh/<key>" git@github.com:<user>/<repo>.git

이제 ''를 하면 '''을''을''으로 넘어가겠습니다.git fetch,git pull , 「」git push、 [ SSH ]에서 합니다.core.sshCommand).git/config를 참조해 주세요.

2021년, Mac을 사용하는 경우.

aws에 ubuntu 서버가 있다고 가정해 보겠습니다.이 서버는 보통 다음과 같이 접속됩니다.

% ssh -i blah/yourkeypair.pem ubuntu@test.fattie.com

터미널에서 그냥

% export GIT_SSH_COMMAND="ssh -i /Users/fattie/Desktop/blah/yourkeypair.pem"

그렇게 하고 나면.그러면 자유롭게...

% git clone ubuntu@test.fattie.com:/home/ubuntu/teste.git  

서버의 repo를 로컬 폴더 "teste"에 복제합니다.

그런 다음 teste/와 같은 일반적인 명령을 자유롭게 수행할 수 있습니다.

% git push origin master

기타 등등.

--

주의: https://stackoverflow.com/a/67287133/294884


서버의 경우 기본적으로는

] git clone --bare the-actual-folder teste.git

그 후 teste.discl에서

] git init --bare --shared

여기에 있는 다른 솔루션이 모두 작동하지 않고 여러 개의 ssh-key를 생성했지만 다음과 같은 간단한 작업을 수행할 수 없는 경우

git pull

다음과 같은 ssh 키 파일이 2개 있다고 가정합니다.

id_rsa
id_rsa_other_key

git repo에서 다음을 시도합니다.

# Run these commands INSIDE your git directory
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_other_key

또한 github 기본 사용자 이름과 사용자 ID가 올바른지 확인합니다.

# Run these commands INSIDE your git directory
git config user.name "Mona Lisa"
git config user.email "mona.lisa@email.com"

상세한 것에 대하여는, https://gist.github.com/jexchan/2351996 를 참조해 주세요.

키를 추가하고 Git 클론을 다시 실행하면 됩니다.

ssh-add ~/.ssh/id_rsa_mynewkey
git clone git@bitbucket.org:mycompany/myrepo.git

이러한 솔루션의 대부분은 매력적으로 보였습니다.그러나 다음 링크에서 일반적인 git-wrapping-script 접근법이 가장 유용하다는 것을 알게 되었습니다.

키 을 ssh로 하는 git

, , 없다' 입니다.git하다

git -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

Alvin의 솔루션은 이 갭을 메우는 잘 정의된 bash-wrapper 스크립트를 사용하는 것입니다.

git.sh -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

서 ★★★★★git.sh 말합니다

#!/bin/bash

# The MIT License (MIT)
# Copyright (c) 2013 Alvin Abad
# https://alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command

if [ $# -eq 0 ]; then
    echo "Git wrapper script that can specify an ssh-key file
Usage:
    git.sh -i ssh-key-file git-command
    "
    exit 1
fi

# remove temporary file on exit
trap 'rm -f /tmp/.git_ssh.$$' 0

if [ "$1" = "-i" ]; then
    SSH_KEY=$2; shift; shift
    echo "ssh -i $SSH_KEY \$@" > /tmp/.git_ssh.$$
    chmod +x /tmp/.git_ssh.$$
    export GIT_SSH=/tmp/.git_ssh.$$
fi

# in case the git command is repeated
[ "$1" = "git" ] && shift

# Run the git command
git "$@"

인식 할 수 .git remote update,git pull , , , , 입니다.git clonecron제한 셸을 탐색하는 데 문제가 있었던 작업 스크립트입니다., R내에서 이해, R을 풀 수.cronsystem("bash git.sh -i ~/.ssh/thatuserkey.pem pull")를 참조해 주세요.

R이 Ruby와 같은 것은 아니지만 R이 할 수 있다면...O:-)

가 있는 (「github」는 「github」를 참조해 ).git pull origin master 「은, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」로 설정합니다.*~/.ssh/config다른 호스트("github" 또는 "gb")가 작동하지 않았습니다.

Host *
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_xxx

많은 좋은 답변들이 있지만, 그들 중 일부는 이전 행정 지식을 가정합니다.

웹 URL을 복제하여 프로젝트를 시작했다면 다음과 같은 점을 분명히 강조하는 것이 중요하다고 생각합니다.https://github.com/<user-name>/<project-name>.git
다음, 이 모든 것이url 에 의거하여 평가하다.[remote "origin"] .git/config SSH URL로 변경되었습니다(아래 코드 블록 참조).

그 외에 꼭 '어울리다', '어울리다', '어울리다', '어울리다'를.sshCommmand이하에 기술한 바와 같이

user@workstation:~/workspace/project-name/.git$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sshCommand = ssh -i ~/location-of/.ssh/private_key -F /dev/null <--Check that this command exist
[remote "origin"]
    url = git@github.com:<user-name>/<project-name>.git  <-- Make sure its the SSH URL and not the WEB URL
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

자세한 내용은 여기를 참조하십시오.

경로 상에 특정 식별파일로 서명하는 디렉토리가 있는 경우 다음과 같이 설정함으로써 .timeout/config 파일을 통해 특정 식별파일을 사용하도록 지정할 수 있습니다.

host github.com
  ControlPath ~/Projects/work/**
  HostName github.com
  IdentityFile ~/.ssh/id_work
  User git

★★★★★★★★★★★★★★★.ssh는 지정된 작업 경로에서 git 명령을 수행할 때 지정된 ID 파일을 사용합니다.

Git Bash가 설치된 Windows에서는 다음을 사용하여 저장소를 추가할 수 있습니다.

ssh-agent bash -c 'ssh-add "key-address"; git remote add origin "rep-address"'

예를 들어 다음과 같습니다.

ssh-agent bash -c 'ssh-add /d/test/PrivateKey.ppk; git remote add origin git@git.test.com:test/test.git'

컴퓨터의 폴더 테스트인 드라이브 D에 있는 개인 키.는, 「」를 변경할 수 .git remote add origingit clone.

Git Bash에 입력하면 패스프레이즈를 묻습니다!

openssh 개인 키와 putty 개인 키는 다르다는 점에 유의하십시오!

puttygen을 사용하여 키를 작성한 경우 개인 키를 openssh로 변환해야 합니다!

여기에 제시된 답변의 대부분은 가장 기본적인 사용법에 대한 자세한 내용을 설명하지 않습니다.

후이는 「」( 「」( 「」)linuxserver)를 선택합니다.

합니다.dyson-ubuntu-vm.pemAzure, AWS 등의 클라우드 서비스 공급자가 로컬 시스템의 .ssh 구성에 대해 다음과 같이 제공합니다.

.pem/home/ssenyonjo/.ssh [열리다], [열리다]/home/ssenyonjo/.ssh/config파일을 작성하고 다음 엔트리를 추가합니다.

Host 20.85.213.44
  HostName 20.85.213.44
  User Dyson
  IdentityFile /home/ssenyonjo/.ssh/dyson-ubuntu-vm.pem
  IdentitiesOnly yes

터미널에서 다음과 같이 클라우드 Linux 서버에 액세스합니다.

ssh Dyson@20.85.213.44

이것이 작동하면 다음과 같이 클라우드 서버에 git 프로젝트를 만듭니다.

Dyson@dyson-ubuntu-vm:~/projects$ git init --bare s2

이제 로컬 머신으로 돌아가서 다음과 같이 빈 저장소를 복제합니다.

ssenyonjo@ssenyonjo-pc:~/Projects/mastering-git$ git clone ssh://Dyson@20.85.213.44/home/Dyson/projects/s2

같은 :fatal: Could not read from remote repository잘못된 폴더에 액세스하고 있는 것을 의미합니다.루트부터 생성된 저장소까지의 올바른 경로 개요를 작성했는지 확인합니다.

컨피규레이션파일을 셋업하지 않고, 키가 필요한 ssh 서버에 액세스 하는 경우는, 다음의 커맨드를 사용할 수 있습니다.

GIT_SSH_COMMAND='ssh -i ~/Projects/aws/keys/aws_ubuntu.pem'  git clone ssh://ubuntu@15.207.99.158/home/ubuntu/projects/mastering-git/rand 

이 사용할 수 .git push ★★★★★★★★★★★★★★★★★」git pull

export GIT_SSH_COMMAND='ssh -i ~/Projects/aws/keys/aws_ubuntu.pem'

참조: https://stackoverflow.com/a/29754018/10030693

이 메서드의 문제는 적어도 Windows에서 bash.exe에 의해 실행되는 경우 매번 새로운 프로세스가 생성되어 휴지 상태가 된다는 것입니다.

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

스케줄에 따라 syncig repo에 사용할 경우 마지막에 & ssh-agent -k를 추가해야 합니다.

예를 들어 다음과 같습니다.

ssh-agent bash -c 'ssh-add C:/Users/user/.ssh/your_key; git -C "C:\Path\to\your\repo" pull && ssh-agent -k' 

ssh-agent -k는 프로세스가 완료되면 프로세스를 종료합니다.

GIT_SSH_COMMAND 환경변수가 Windows(CMD)에서 동작하도록 하려면:

set GIT_SSH_COMMAND="ssh -i private_key_file"

용도:

set "GIT_SSH_COMMAND=ssh -i private_key_file"

견적은 다음과 같아야 합니다.

set "variable=value" 

일부 백고런드:

이것은 @VonC의 답변의 확장입니다.먼저 읽어주세요.

사용 예로는 SSH를 사용하여 개인 GitHub 계정과 업무 GitHub 계정을 모두 사용해야 합니다.내부적으로 다른 업무 저장소가 있기 때문에 업무용 SSH 키를 기본값으로 사용하고 싶습니다.따라서 복제는 원활하게 작동해야 합니다.

제가 수행한 단계는 다음과 같습니다.

  • 기본 SSH 키를 생성하여 work git 계정에 추가합니다.

  • 별도의 파일에 개인 SSH 키를 생성하여 개인 git 계정에 추가합니다.

  • 하다, 하다, 하다, 에 다음과 같은 기능 를 추가해 보세요..bashrc ★★★★★★★★★★★★★★★★★」.zshrc파일화하여 소스로 합니다.

     gclone() { 
         # Clone the repo-url using personal ssh-key
         git -c core.sshCommand="ssh -i path_to_personal_key" clone "$1" &&
    
         # Extract repo name from URL using "awk" and switch to that folder using "cd" 
         cd $(awk '{ sub(/.*\//, ""); sub(/\.git.*/, ""); print }' <<< "$1") &&
    
         # Set personal ssh-key as default for this repo 
         git config core.sshCommand "ssh -i path_to_personal_key";
     }
    
  • gclone명령을 사용하여 개인 SSH 키를 사용하여 저장소를 복제하고 해당 키를 기본값으로 사용하도록 repo를 설정합니다.

  • 의 「」를 합니다.git clone기본(워크) SSH 키를 사용하여 저장소를 복제하는 명령어.

다음과 같이 ~/.ssh/config를 생성해야 합니다.

Host <Your bitbucket server>
User <userid>
Hostname <Your bitbucket server as above>
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa<file> This is your private key file

아래와 같은 허가

-rw------- $HOME/.ssh/config

공용 키를 git에 추가합니다(cat ~/.ssh/id_rsa_pub [또는 simillar name]).

그리고 아래와 같이 git 클론을 만듭니다.

git clone ssh://blahblah@blah.com/userid/test.git

하나의 명령어로 복제

git -c core.sshCommand='ssh -i /path/to/key/' clone git@github.com:your_repository.git /path/target/clone --branch git_branch_name

용 i i i i를 쓴다.zsh의 zsh에 다른 .ssh-agent다른 목적(리모트 서버로의 액세스 등)을 노트북으로 자동적으로 실현합니다. 중 는 my @Nick입니다dotfiles모든 기계에서 최신 버전으로 작업하고 싶습니다.)

bash -c 'eval `ssh-agent`; ssh-add /home/myname/.dotfiles/gitread; ssh-add -L; cd /home/myname/.dotfiles && git pull; kill $SSH_AGENT_PID'
  • ssh-agent 생성
  • 에이전트에 읽기 전용 키 추가
  • 디렉토리를 내 git repo로 변경
  • ifcd reporepo dir에서 .회답하다
  • ssh-agent를 생성했습니다. (많은 에이전트가 남아 있는 것을 원하지 않습니다.)

언급URL : https://stackoverflow.com/questions/4565700/how-to-specify-the-private-ssh-key-to-use-when-executing-shell-command-on-git

반응형