programing

Git 개인 액세스 토큰은 어디에 저장합니까?

goodsources 2023. 5. 6. 14:55
반응형

Git 개인 액세스 토큰은 어디에 저장합니까?

개인 액세스 토큰을 GitHub에서 생성한 후 기계의 로컬 어딘가에 저장해야 합니까?

만약 그렇다면, 그것을 보관할 수 있는 선호하는 방법이 있습니까?

암호의 요점은 (이상적으로) 암호를 기억하고 시스템이 해시하기 때문에 일반 텍스트로 저장되지 않는다는 것입니다.
하지만 GitHub의 개인 접근 토큰 시스템은 기본적으로 토큰을 일반 텍스트로 저장하도록 강요하는 것처럼 보입니다.

첫째, PAT(개인 액세스 토큰)는 단순한 암호가 아니라 다음과 같은 것입니다.

  • 여러 번 생성할 수 있습니다(예: GitHub 저장소에 액세스해야 하는 시스템당 하나).
  • 언제든지(GitHub 웹 인터페이스에서) 해지할 수 있으므로 이러한 시스템 중 하나에서 PAT가 남아 있더라도 PAT는 더 이상 사용되지 않습니다.

이는 계정에 고유한 암호와 다르며 사용하는 모든 곳에서 암호를 수정하지 않고는 쉽게 변경할 수 없습니다.


명령줄 또는 API에서 Git를 사용하여 HTTPS를 통해 Git 작업을 수행할 때 암호 대신 PAT를 사용할 수 있으므로 Git 자격 증명 도우미를 사용하여 안전하게 캐시할 수 있습니다.
예를 들어 Windows에서 GCM(Windows, Mac 또는 Linux용 Git Credential Manager)을 통해 Windows Credential Manager를 사용하는 경우:

git config --global credential.helper manager-core
# Git 2.39+
git config --global credential.helper manager

(매니저-코어가 Git 2.39+, 2022년 4분기 매니저로 교체/명칭 변경됨)

처음 repo로 이동할 때 사용자 이름 및 PAT 자격 증명을 묻는 팝업이 나타납니다.
다음 번에는 인증 정보 관리자에 안전하게 저장된 PAT를 묻지 않고 직접 재사용합니다.

OSX 키체인을 사용하는 MacGNOME 키링을 사용하는 Linux(2021년에는 DBus 세션이 필요할 것으로 예상됨)에도 유사한 아이디어가 적용되지만 2021년에는 GCM-Core에서 이러한 사용 사례를 다룹니다.
PAT는 암호화된 자격 증명 저장소에 저장해야 합니다.


위에서 언급한 바와 같이 보다 현대적인 솔루션(2020년 4분기)은 마이크로소프트 Git-Credential-Manager 코어 또는 2022년 4분기 마이크로소프트 Git-Credential-Manager입니다.

git config --global credential.helper manager-core
# Git 2.39+:
git config --global credential.helper manager

Git 2.39 이전(2022년 4분기), 리눅스용:

을 설치하기 합니다.git-credential-manager-core최신 릴리스 다운로드, 예를 들어

sudo dpkg -i <path-to-package>
git-credential-manager-core configure

그러나 Mekky Mayata가 코멘트에서 언급한 바와 같이 Linux에서 GCM(Git-Credential-Manager-Core)을 사용할 경우에는git config --global credential.credentialStore

"Linux의 자격 증명 저장소"를 참조하십시오.

GCM(Git Credential Manager)이 리눅스 플랫폼에서 관리하는 인증 정보를 저장하는 4가지 옵션은 다음과 같습니다.

기본적으로 GCM은 구성되지 않습니다.
증명 하려면 다을설자증명저장수있선다습니택할을 합니다.GCM_CREDENTIAL_STORE 변수 "환경 변수credential.credentialStoreGit 구성 설정.

에이전트 18이 코멘트에서 언급한 바와 같이,git-credential-libsecretlibsecret-1-0그리고.libsecret-1-dev좋은 첫 단계입니다.
하지만, 다시 말하지만, 그것은 이제 마무리되어야 합니다.credential-manager-core(Git 2.39µ전).

제 경우 Ubuntu에서 승인된 솔루션이 다음과 같은 메시지와 함께 작동하지 않았습니다.

git: 'incential-manager'는 git 명령이 아닙니다.

그렇지만storemanager했습니다.

git config --global credential.helper store

또다을생수있다니습성할음는▁a를 만들 수 .~/.netrc홈 디렉토리에 파일을 저장하고 로그인 자격 증명을 저장합니다.

cat ~/.netrc
machine github.com login <login-id> password <token-password>

Ubuntu 20.04에서 테스트되었으며 Git 2.25.1 및 unity 7.5를 사용하여 거의 새로 설치되었습니다.

인증 기본 사항

Github에는 인증 키(해당 인증 키에 연결된 특정 권한)가 필요합니다.특정 인증 키는 특정 권한(개인 저장소 읽기, 공용 저장소 읽기 쓰기 등)과 "암호 역할"을 하며 사용자가 원할 때 언제든지 해지할 수 있는 권한을 가집니다.

개인 액세스 토큰

  1. 먼저 PAT.I.E., 설정 --> 개발자 설정 --> 사용자 액세스 토큰 --> 새 토큰 생성 --> 참고 --> 권한 설정(repo,repo_hook maybe) --> 토큰 생성
  2. git push 긴 암호)을합니다.repo를 입력합니다.

다른 방법으로 암호 저장

    • 파일에서 수행할 수 있으며 다음을 사용할 수 있습니다.xclip클립보드로 가져와 매번 붙여넣기(나사)
    • git 명령어를 사용한 캐시 git config credential.helper cache <time-limit-of-cache>하지만 시간 제한이 지나면 어떻게든 비밀번호 클립을 작성해야 합니다.
    • git 명령을 사용하여 파일에 영구 저장 git config credential.helper store않음 ( --global 사지않음하용을않음(▁(지▁--하)암호화되지 않았습니다.파일을 열고 읽을 수 있습니다. 예를 들어, 다른 사람이 랩톱에 액세스할 경우 부팅 가능한 USB를 사용하여 암호를 거의 읽을 수 있습니다(시스템 전체가 암호화되지 않은 경우).
    • 또는 여기에 따라 암호화 경로로 이동합니다.하나도 복잡하지 않아요. 3단계만 하면 돼요.
sudo apt-get install libsecret-1-0 libsecret-1-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret
    
git config credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

이렇게 하면 암호/개인 액세스 토큰을 암호화된 형식으로 저장할 수 있습니다.git config은 파은에찾수있에서 찾을 수 ..git/config필요한 경우 여기에 표시된 대로 로케아 보고서에 파일을 저장합니다.

추신: Gnome-keyring을 사용할 것을 제안하는 많은 장소들이 있지만, 그것은 분명히 권장되지 않습니다.

둘 이상의 계정에 대한 암호/PAT 저장

에게 @VonC @VonC 우고제가다는것보안다입니처럼하요하이필것게고은지리에워로다까▁a▁need▁we▁this▁that▁@v다v▁as보니입▁becomes▁and▁it▁appears처것▁tricky▁suggests럼이 @VonC가 필요하다고 제안하는 것처럼 보입니다.Git-Credential-Manager core(GCM 코어). 답변의 결과를 바탕으로 이 답변이 향상되었습니다.

  1. 먼저 GCM 코어를 설치합니다.

    1. 최신 .deb 패키지 다운로드
    2. sudo dpkg -i <path-to-package>
    3. git-credential-manager-core configure
    4. git config --global credential.credentialStore secretservice우리가 말하는 바와 같이libsecret
  2. 최신 Git 가져오기

    제 경우에는 2.25g을 가지고 있었고 오류가 있었습니다.error: unknown option 'show-scope'GCM 코어가 더 높은 Git(최소 2.26)을 사용하는 것으로 보입니다.

    의 가장 따서최신가장뛰어제설치다품합니을난을 합니다.git여기에 따라:

     sudo add-apt-repository ppa:git-core/ppa
     sudo apt-get update
     apt list git # shows the latest git currently 2.31
     sudo apt-get install git #or sudo apt-get upgrade
    
  3. 사용자 이름이 내장된 git 원격 경로 업데이트

    GCM 코어는 서로 다른 계정을 식별하기 위해 이것이 필요합니다.:(

     git remote set-url origin https://user1@github.com/user1/myRepo1.git
     git remote set-url origin https://user2@github.com/user1/myRepo1.git
                                   ^^^^^
    

당신의.~/.gitconfig같이 .

[credential]
   helper = /usr/bin/git-credential-manager-core
   credentialStore = secretservice
[credential "https://dev.azure.com"]
   useHttpPath = true

인증 정보를 캐시에 저장하고 Git 작업을 수행할 때마다 로그인하지 않으려면 다음 단계를 수행합니다.

  1. 로컬 리포지토리 폴더로 이동합니다.
  2. 폴더의 현재폴터미서에널의더:서▁the:git config --global --replace-all credential.helper cache
  3. 합니다.git push또는git pull.
  4. 사용자 이름 및 액세스 토큰으로 로그인합니다(액세스 토큰은 암호임).토큰은 GitHub에서 설정할 수 있으며 repo, workflow, write: packages 및 delete: packages에 액세스할 수 있습니다.
  5. 를 반복합니다.git push또는 git 액션을 수행하면 이제부터는 로그인 자격 증명을 요청하지 않습니다.

된 상태로 하고 저소내암호상태유로지다고하로사다드용니합여음하을장된을 사용하여 하는 것을 ..envrc(https://direnv.net/)

이를 위해 ssh-vault를 사용하여 GitHub가 이미 노출하고 있는 ssh 키를 사용하여 데이터를 암호화합니다. 예:

echo MY_TOKEN="secret" | ssh-vault -u <github-user> create > my-encypted-vars.ssh

에 러면그내용은그의 입니다..envrc다음과 같이 보입니다.

echo "Enter ssh key password"
context=$(ssh-vault view $HOME/projects/my-encrypted.ssh | tail -n +2)
export ${context}

이게하면데암해다니독됩호의 됩니다.my-encrypted-vars.ssh 및 설정 서기MY_TOKEN에 추가할 수 .cd프로젝트 dir로.

이렇게 하면 토큰/변수가 "안전하게" 저장되고 항상 환경 변수로 사용할 수 있습니다.

푸시/풀 간에 지속적으로 유지하는 데 도움이 되도록 이 기능을 활성화합니다.

git config credential.helper store

repo / for macOS 사용자의 지속적인 복제를 위해 / install iTerm2 https://iterm2.com/

여기에 이미지 설명 입력

도구 벨트 사용

여기에 이미지 설명 입력

필요할 때마다 스니펫을 클릭하세요. 추신. 당신은 오마이-즈시를 사용하고 있죠?https://github.com/ohmyzsh/ohmyzsh

다음을 사용하여 정의된 시간 동안 자격 증명을 캐시할 수 있습니다.

git config --global credential.helper cache

기본 캐시 기간은 900초(15분)이지만 다음을 사용하여 변경할 수 있습니다.

git config --global credential.helper 'cache --timeout=3600'

다음 Github 페이지를 참조하십시오.

https://docs.github.com/en/github/using-git/caching-your-github-credentials-in-git

이는 영구 저장소가 아니며 다른 의견과 마찬가지로 일반 텍스트로 자격 증명을 저장하면 안 됩니다. 이는 보안 위험입니다.저는 비밀번호 관리자(https://bitwarden.com/) 를 사용하여 개인 접근 토큰(PAT)을 저장한 다음 처음 사용할 때 복사하고 캐시합니다.Github 계정에서 2FA를 사용할 경우 PAT가 필요합니다.

글쎄요, 당신은 당신의 앱이 그것을 요청할 때마다 그것을 입력하고 싶지 않을 때 토큰을 어딘가에 저장해야 합니다:-)

좋은 해결책은 이미 한 의견에서 제안한 것처럼 환경 변수를 사용하는 것입니다.

그러나 환경 변수를 어딘가에 설정해야 합니다.
내가 사용하는 Windows(윈도우)에서는 시스템 설정의 대화 상자를 사용할 수 있습니다(다른 운영 체제에도 비슷한 기능이 있는지 모르겠습니다).

저는 이것을 하지 않습니다. 저는 제 프로젝트에서 대본을 선호합니다.
개인 프로젝트에서는 이를 소스 제어에 적용할 수 있지만 이는 선호도의 문제입니다.

제 개인 프로젝트 중 하나에서 개인 액세스 토큰을 사용하여 GitHub API도 호출하고 있습니다.
이것은 명령줄 앱이며 최종 사용자는 토큰을 구성 파일에 저장합니다(괜찮습니다).

하지만 개발을 위해서도 토큰이 필요합니다. 왜냐하면 그 프로젝트는 제가 GitHub API라고 부르는 곳에서 통합 테스트를 하기 때문입니다.

그리고 그 프로젝트는 GitHub에서 공개되어 있어서 소스 제어에 토큰을 저장할 수 없었습니다.

제가 한 일은 다음과 같습니다.

  • 이름이 Windows(윈도우)인 배치 파일이 있습니다.environment-variables.bat 필수 합니다.
  • 테스트를 실행하는 데 사용하는 배치 파일과 빌드 스크립트에서 이를 호출합니다.
  • environment-variables.bat소스 제어에서 무시됨
  • 그러나 소스 제어에는 동일하지만 가짜 토큰/암호를 포함하는 것이 있습니다.

이 파일의 이름을 다음으로 변경할 수 있습니다.environment-variables.bat가짜 암호를 실제 암호로 대체하면 모든 것이 작동합니다.


하지만 이것이 모든 경우에 완벽한 해결책은 아닙니다.

제 프로젝트에서 향후 더 많은 API를 위해 토큰/패스워드를 더 많이 사용해야 하는 문제가 있습니다.

내 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜ에 있는 의 수environment-variables.bat 증가하여 잠재적인 기여자가 모든 통합 테스트를 실제로 실행하기 어렵게 됩니다.그리고 저는 여전히 그것을 어떻게 처리해야 할지 모르겠습니다.

제 사용 사례에서, 저는 PAT를 LastPass, KeePass, 1Pass와 같은 암호 관리자에 저장합니다.Linux 환경에서 필요한 경우(예:Docker), 환경 변수에 PAT를 저장한 다음 git의 자격 증명 도우미 설정을 사용합니다.예:

git config --global credential.helper 'cache --timeout 600'

<< eof tr -d ' ' | git credential-cache store 
  protocol=https
  host=github.com
  username=nonce
  password=${GITHUB_PAT}
eof

PAT를 사용하는 경우 사용자 이름은 공백을 제외한 모든 항목이 될 수 있습니다.다음은 자세히 설명하는 요점입니다.

https://gist.github.com/rwcitek/da862e9e27cc28d3e96e62a2ca4b2b64

대신 git를 사용합니다.기본적으로 모든 https://github 통화를 액세스 토큰 + https://로 대체합니다.

git config --global url."https://<username>:<github-token>@github.com/".insteadOf "https://github.com/

이제 github에 대한 모든 호출에는 자동으로 자격 증명이 추가됩니다.

저는 이 훌륭한 답을 여기서 찾았습니다.대신 깃에 대한 추가 정보입니다.

패스를 사용하여 github https 토큰을 저장할 수 있습니다.

Git 호스트를 패스 항목에 매핑하기 위한 두 가지 대안:

  • bashpass선택 항목:
#!/usr/bin/env bash
# assuming "get" action from git and a config like this
# git config --global credential.helper $XDG_BIN_HOME'/git_credentials_from_pass $@'
while IFS= read -r line
do
  echo "$line"
  if [[ "$line" =~ host=.*github.com.* ]]; then
      echo "username=your_user_name"
      echo "password=$(pass show token_github.com/your_username)"
  #else ...
  fi
done

your_username그리고.token_github.com pass insert.

이 토을에추다에 됩니다.pass번 입력하거나 : 다음과 같이 입력합니다.

echo your_github_token | sed p | pass add token_github.com/your_username
  • 패스 깃 도우미 설치 및 다음:
git config --global credential.helper '!pass-git-helper $@'

pass-git-helper합니다. ini 은 ini 을 사용해야 합니다.git 및 요청및pass참가 신청${XDG_CONFIG_HOME}/pass-git-helper/git-pass-mapping.ini예:

[DEFAULT]
username_extractor=entry_name
[github.com*]
target=token_${host}/your_github_username

PAT 저장을 위해 gh 라이브러리를 사용할 수 있습니다.

설치

conda install -c conda-forge gh -y

설치가 완료되면 다음 명령을 입력합니다.

gh auth login
Use the arrow and enter keys to navigate a series of prompts.

What account do you want to log into?

    > Github.com
      GitHub Enterprise Server

What is your preferred protocol for Git operations?

    > HTTPS
      SSH

Authenticate Git with your GitHub credentials? (Y/n)

How would you like to authenticate GitHub CLI?

      Login with a web browser
    > Paste an authentication token 

이제 토큰을 추가했습니다. 코드를 훨씬 쉽게 풀링하고 푸시할 수 있습니다!

Git 자격 증명 관리자를 설치합니다!https://github.com/GitCredentialManager/git-credential-manager . GCM은 세션 간에 유지되는 다양한 플랫폼별 자격 증명 저장소뿐만 아니라 캐싱을 지원합니다.

더욱 좋은 점: GCM은 OAuth가 탑재된 웹 브라우저를 통해 GitHub 및 GitLab에 대한 사용자 친화적인 보안 인증을 지원합니다.따라서 더 이상 개인 액세스 토큰을 만들 필요가 없습니다.당신이 Git Push를 할 때, GitHub 링크를 따라가서 앱을 승인하기만 하면 됩니다.후속 인증은 상호 작용이 필요하지 않습니다.

OAuth는 개인 액세스 토큰보다 더 안전합니다. 토큰의 만료 기간이 짧으며 필요할 때 더 오래 지속되는 새로 고침 토큰을 사용하여 새로 고쳐지기 때문입니다.

curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh
gh auth login

프로토콜과 토큰을 입력하도록 요청할 것입니다.

그리고 레포를 다시 복제합니다.토큰을 요구하지 않습니다.

기본적으로 저는 이것을 제 기계에서 했습니다.

https://gist.github.com/bsara/5c4d90db3016814a3d2fe38d314f9c23

프로필 스크립트가 설명된 것과 약간 다릅니다.

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
        . "$env" >| /dev/null ; 
}

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

언급URL : https://stackoverflow.com/questions/46645843/where-to-store-my-git-personal-access-token

반응형