パーソナルアクセストークンをGitHubで生成した後、マシン上のローカルのどこかに保存する必要がありますか?
「はい」の場合、保存できる好ましい方法はありますか?
パスワードのポイントの半分は、(理想的には)パスワードを記憶し、システムがそれらをハッシュするため、プレーンテキストのどこにも保存されないということです。
まだGitHubのパーソナルアクセストークンシステムは、基本的にトークンをプレーンテキストで保存するように強制しているようです。
まず、 PAT(Personal Access Token) は単純なパスワードではありませんが、次と同等です:
これは、アカウント固有のパスワードとは異なり、パスワードを使用するたびに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資格情報ストアに保存します。
さて、アプリが要求するたびに入力したくない場合は、トークンを保存する必要があります。
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.bat
will内のトークンの数が増加し、潜在的な貢献者がすべての統合テストを実際に実行することが難しくなります。そして、私はまだ それをどのように扱うかわからない 。
私はそれらをリポジトリ内で暗号化して、.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}
これにより、プロジェクトディレクトリにcd
が挿入されるたびに、my-encrypted-vars.ssh
ファイルのデータが復号化され、MY_TOKEN
が環境変数に設定されます。
これを行うことにより、トークン/変数は「安全に」保存され、常に環境変数として使用できる状態になります。
基本的に私は自分のマシンでこれを行いました:
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