私git push
はリモートGitリポジトリーに作業しています。
すべてのpush
入力に私を促すメッセージが表示されますusername
とpassword
。すべてのプッシュでそれを回避したいのですが、それを回避するように構成するにはどうすればよいですか?
私git push
はリモートGitリポジトリーに作業しています。
すべてのpush
入力に私を促すメッセージが表示されますusername
とpassword
。すべてのプッシュでそれを回避したいのですが、それを回避するように構成するにはどうすればよいですか?
回答:
ターミナルを開いてSSH鍵を作成します。
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(コミットプログラムが証明書/秘密鍵と公開SSH鍵を使用できる場合にのみ機能します)
ここでウォークスルー、上記のステップのためのパテGENには、
この手順は、リモコンの設定方法によって異なります。
GitHubリポジトリであり、管理者権限がある場合は、設定に移動して[SSHキーを追加]をクリックします。の内容を~/.ssh/id_rsa.pub
「キー」というラベルの付いたフィールドにコピーします。
リポジトリが他の誰かによって管理されている場合は、管理者にを付与してくださいid_rsa.pub
。
リモートリポジトリが管理されている場合は、次のコマンドを使用できます。
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
上記の手順を実行してもパスワードプロンプトが表示される場合は、リポジトリのURLが次の形式であることを確認してください
git+ssh://git@github.com/username/reponame.git
とは対照的に
https://github.com/username/reponame.git
レポURLを表示するには、次のコマンドを実行します。
git remote show origin
次の方法でURLを変更できます。
git remote set-url origin git+ssh://git@github.com/username/reponame.git
[1]このセクションには、Eric Pの回答が組み込まれています
git remote set-url origin git@github.com:/username/projectname.git
次のコマンドを実行して、資格情報のキャッシュを有効にします。
$ git config credential.helper store
$ git push https://github.com/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
キャッシュの有効期限も指定する必要があります。
git config --global credential.helper 'cache --timeout 7200'
資格情報のキャッシュを有効にすると、7200秒(2時間)キャッシュされます。
注:暗号化されていないパスワードをローカルディスクに保存する資格情報ヘルパー。
git
マンページから:「このヘルパーを使用すると、パスワードが暗号化されずにディスクに保存され、ファイルシステムのアクセス許可によってのみ保護されます。」
store
暗号化されていないディスクにパスワードを保存する資格情報ヘルパーに関する警告がありません。
git config --unset credential.helper
SSHキーがすでに設定されていて、それでもパスワードプロンプトが表示される場合は、リポジトリのURLが次の形式であることを確認してください
git+ssh://git@github.com/username/reponame.git
とは対照的に
https://github.com/username/reponame.git
レポURLを表示するには、次のコマンドを実行します。
git remote show origin
次のgit remote set-url
ようにしてURLを変更できます:
git remote set-url origin git+ssh://git@github.com/username/reponame.git
git init
、ローカルで使用した後、GitHub Webサイトの新しいリポジトリからリモートを追加した後にプッシュしようとした後の問題を修正したものです。
git@github.com/username/reponame.git
--repo
git pushコマンドのオプションを使用するだけです。このような:
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
毎回パスワードを気にする必要がない場合は、URLを単に機能するように設定することにも注意します。
git push --repo https://github.com/Username/repo
、.git
拡張子なしでも機能します
git-credential-storeを使用して
git config credential.helper store
このヘルパーを使用すると、パスワードが暗号化されずにディスクに保存され、ファイルシステムのアクセス許可によってのみ保護されます。これが許容できるセキュリティのトレードオフではない場合は、git-credential-cacheを試すか、オペレーティングシステムが提供する安全なストレージと統合するヘルパーを見つけてください。
デフォルトでパスワードを15分間保存するgit-credential-cacheを使用します。
git config credential.helper cache
別のタイムアウトを設定するには、--timeout
(ここでは5分)を使用します
git config credential.helper 'cache --timeout=300'
- Macを使用している場合、Gitには「osxkeychain」モードが付属しており、システムアカウントに関連付けられている安全なキーチェーンに認証情報をキャッシュします。この方法では、資格情報がディスクに保存され、期限切れになることはありませんが、HTTPS証明書とSafariの自動入力を保存するのと同じシステムで暗号化されます。コマンドラインで次のコマンドを実行すると、この機能が有効になります
git config --global credential.helper osxkeychain
。キーチェーンアプリを使用して、認証情報をキーチェーンに保存する必要もあります。- Windowsを使用している場合は、「Git Credential Manager for Windows」と呼ばれるヘルパーをインストールできます。これは、上記の「osxkeychain」ヘルパーに似ていますが、Windows資格情報ストアを使用して機密情報を制御します。それはで見つけることができhttps://github.com/Microsoft/Git-Credential-Manager-for-Windows。[私を強調する]
credential.helper cache
しません。それはあるはずですgit config --global credential.helper wincred
。
ステップ1 -
以下のコマンドを使用してLinuxシステムにSSHキーを作成します
ssh-keygen -t rsa -b 4096 -C "your_email"
パスフレーズとファイル名を要求します(デフォルトは〜/ .ssh / id_rsa、〜/ .ssh / id_rsa.pubです)
ステップ2 -
ファイルを作成したら、公開鍵id_rsa.pubをgithubアカウントのsshセクションに追加します。
ステップ3-
マシンで、以下のコマンドを使用して秘密鍵id_rsaをssh-agentに追加します
ssh-add ~/.ssh/id_rsa
ステップ4-
次のコマンドを使用して、リモートurl git@github.com:user_name / repo_name.gitをローカルのgit repoに追加します。
git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git
それでおしまい。
gitクライアントをOS認証情報ストアに接続します。たとえば、Windowsでは、資格ヘルパーをwincredにバインドします。
git config --global credential.helper wincred
Windowsオペレーティングシステムでは、代わりにこれを使用してください。これは私にとっては機能します。
https://{Username}:{Password}@github.com/{Username}/{repo}.git
例えば
git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git
git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git
git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git
git push origin master
上記のソリューションについて何度か指摘したかっただけです:
git config credential.helper store
この後、パスワードを要求する任意のコマンドを使用できます。押す必要はありません。(たとえば、プルすることもできます)その後、ユーザー名/パスワードを再度入力する必要はありません。
私の知る限り、2つの安全な方法があります。キーストアを使用して暗号化されたsshまたはpasswdです。
cat ~/.ssh/id_rsa.pub
、そこに貼り付け、名前を付けて保存します(そのようなファイルがない場合は、自分で生成しますssh-keygen -t rsa
- すべてのプロンプトでEnterキーを押します)。git remote set-url origin git+ssh://git@github.com/username/reponame.git
-最初に確認できますgit remote -v
);touch t; git add t; git commit -m "test"; git push
、パスワードなしの世界を楽しんでください。git config --global credential.helper store
他の人が言及したように使用する場合、暗号化されていないパスワードはプレーンテキストで保存されるため、~/.git-credentials
安全ではありません。
暗号化してみてください
sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
git config --global credential.helper store
この場合、を使用してい
https://git@github.com/username/reponame.git
ます。
PCが安全であるか、パスワードのセキュリティを気にしない場合、これは非常に簡単に実現できます。リモートリポジトリがGitHubにありorigin
、リモートリポジトリのローカル名であると仮定して、次のコマンドを使用します
git remote set-url --push origin https://<username>:<password>@github.com/<repo>
--push
フラグは、これがために、リポジトリのURLを変更し確実にgit push
コマンドのみ。(元の投稿で尋ねられた質問はgit push
コマンドのみに関するものです。プッシュ操作でのみユーザー名とパスワードを要求することは、GitHubのパブリックリポジトリの通常の設定です。GitHubのプライベートリポジトリでも、プルおよびフェッチ操作にはユーザー名とパスワードが必要です。 、したがって、プライベートリポジトリの場合は使用したくない--push flag
...)
警告:これは本質的に安全ではありません:
ISP、またはネットワークアクセスをログに記録している誰もが、URL内のプレーンテキストのパスワードを簡単に見ることができます。
PCにアクセスした人は誰でも、を使用してパスワードを表示できますgit remote show origin
。
そのため、SSHキーの使用が受け入れられます。
SSHキーでも完全に安全ではありません。PCにアクセスできる人はだれでも、たとえば、リポジトリを破壊するプッシュを実行したり、さらに悪いことに、プッシュコミットでコードに微妙な変更を加えることができます。(プッシュされたすべてのコミットは明らかにGitHubで非常に目立ちます。しかし、誰かがコードを不正に変更したい場合--amend
は、コミットメッセージを変更せずに以前のコミットを実行し、強制的にプッシュすることができます。これはステルスであり、実際には非常に困難です。 )
しかし、パスワードを明らかにすることはさらに悪いことです。攻撃者がユーザー名とパスワードを知った場合、自分のアカウントからのロック、アカウントの削除、リポジトリの完全な削除などを行うことができます。
または、単純さとセキュリティのために、URLにはユーザー名のみを指定できるため、毎回パスワードを入力する必要git push
がありますが、毎回ユーザー名を入力する必要はありません。(私はこのアプローチが非常に好きです。パスワードを入力する必要があるgit push
ので、毎回考えるのが一時停止になるのでgit push
、偶然ではありません。)
git remote set-url --push origin https://<username>@github.com/<repo>
@
、それはgitサーバーの一部として@の後のパスワードを考えるコマンドを壊していますか?
これはすべて、gitがclone / pull / push / fetchコマンドでパイプを介して認証情報を送信するオプションを提供していないために発生します。credential.helperを提供しますが、ファイルシステムに格納するか、デーモンなどを作成します。多くの場合、GITの認証情報はシステムレベルの認証情報であり、それらを安全に保つための責任はgitコマンドを呼び出すアプリケーションにあります。確かに非常に危険です。
これは私が回避しなければならなかったものです。1. Gitバージョン(git --version)は1.8.3以上である必要があります。
GITクローン
クローンを作成するには、URLをhttp:// {myuser} @ {my_repo_ip_address} / {myrepo_name.git}の形式からhttp:// {myuser}:{mypwd} @ {my_repo_ip_address}に変更した後、「git clone URL」を使用します/{myrepo_name.git}
次に、次のセクションのように、パスワードのリポジトリを削除します。
パージ
さて、これはなくなっていたでしょう
アプリケーションがJavaを使用してこれらのコマンドを発行する場合は、ランタイムの代わりにProcessBuilderを使用します。ランタイムを使用する必要がある場合は、単一のストリングを引数として取るものではなく、/ bin / bashおよび-cを引数としてストリング配列を引数として取るgetRunTime()。execを使用します。
GIT FETCH / PULL / PUSH