web-dev-qa-db-ja.com

GitHubからの個人アクセストークンを保存する場所

パーソナルアクセストークンをGitHubで生成した後、マシン上のローカルのどこかに保存する必要がありますか?

「はい」の場合、保存できる好ましい方法はありますか?

29

パスワードのポイントの半分は、(理想的には)パスワードを記憶し、システムがそれらをハッシュするため、プレーンテキストのどこにも保存されないということです。
まだGitHubのパーソナルアクセストークンシステムは、基本的にトークンをプレーンテキストで保存するように強制しているようです。

まず、 PAT(Personal Access Token) は単純なパスワードではありませんが、次と同等です:

  • 複数の時間を生成できます(たとえば、GitHubリポジトリにアクセスする必要があるマシンごとに1つ)
  • (GitHub Webインターフェースから)いつでもrevokeすることができます。これにより、これらのマシンの1つに残っていても、そのPATは廃止されます。

これは、アカウント固有のパスワードとは異なり、パスワードを使用するたびにalso変更することなく簡単に変更することはできません。


コマンドラインまたはAPIでGitを使用してHTTPS経由でGit操作を実行する場合、パスワードの代わりにPATを使用できるため、 git credential helper を使用して安全にキャッシュできます。
たとえば、Windowsでは、 GCM-Git Credential Manager-for Windows を介して Windows Credential Manager を使用します。

git config --global credential.helper manager

初めてリポジトリにプッシュするとき、ポップアップで資格情報が求められます:ユーザー名andPAT。
次回は、PATを要求せず、直接再利用します。PATは、Credential Managerに安全に保存されたままです。

同様の考え方が、 Mac OSXキーチェーン 、およびLinux GNOMEキーリング にも当てはまります。
アイデアは残ります:PATをencrypted資格情報ストアに保存します。

21
VonC

さて、アプリが要求するたびに入力したくない場合は、トークンを保存する必要があります。

1つのコメント で既に提案されているように、環境変数を使用するのが良い解決策です。

ただし、環境変数はどこかに設定する必要があります。
Windows(私が使用している)では、システム設定で dialog box を使用できます(他のオペレーティングシステムが似たような)

私はこれをしません、私のプロジェクトのスクリプトを好みます。
プライベートプロジェクトでは、ソース管理にコミットできますが、これは好みの問題です。

私の個人プロジェクトの1つでは、個人アクセストークンを使用してGitHub APIも呼び出しています。
これはコマンドラインアプリであり、エンドユーザーはトークンを構成ファイルに保存します(これで問題ありません)

しかし、プロジェクトにはGitHub APIを呼び出す統合テストがあるため、開発にもトークンが必要です。

そして、そのプロジェクトはGitHubで公開されているため、トークンをソース管理に保存できませんでした。

私がしたことはこれです:

  • アクセストークンを含むすべての必要な環境変数を設定するenvironment-variables.batというバッチファイル(Windowsを使用していることを思い出してください)があります
  • ビルドスクリプト および バッチファイル でこれを呼び出しています。テストの実行に使用しています。
  • environment-variables.batソース管理では無視されます
  • ただし、ソース管理では、代わりに environment-variables.bat.sample があり、これには同じものが含まれていますが、偽のトークン/パスワードが含まれています。

したがって、このファイルの名前をenvironment-variables.batに変更し、偽のパスワードを実際のパスワードに置き換えるだけで、すべてが機能します。


ただし、これはすべての場合に最適なソリューションではありません。

私のプロジェクトでは、将来、より多くのAPIのためにより多くのトークン/パスワードを使用する必要があるという問題があります。

したがって、environment-variables.batwill内のトークンの数が増加し、潜在的な貢献者がすべての統合テストを実際に実行することが難しくなります。そして、私はまだ それをどのように扱うかわからない

2

私はそれらをリポジトリ内で暗号化して、.envrchttps://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}

これにより、プロジェクトディレクトリにcdが挿入されるたびに、my-encrypted-vars.sshファイルのデータが復号化され、MY_TOKENが環境変数に設定されます。

これを行うことにより、トークン/変数は「安全に」保存され、常に環境変数として使用できる状態になります。

2
nbari

基本的に私は自分のマシンでこれを行いました:

https://Gist.github.com/bsara/5c4d90db3016814a3d2fe38d314f9c2

私のプロファイルスクリプトは、説明されているものとわずかに異なります。

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
1
memo