GitHubアカウントからPCにGitリポジトリのクローンを作成しました。
PCとラップトップの両方で作業したいが、1つのGitHubアカウントで作業したい。
PCを使用してGitHubをプッシュまたはプルしようとすると、ユーザー名とパスワードが必要になりますが、ラップトップを使用しているときは必要ありません。
とやり取りするたびにユーザー名とパスワードを入力したくありません origin
。ここで何が欠けていますか?
GitHubアカウントからPCにGitリポジトリのクローンを作成しました。
PCとラップトップの両方で作業したいが、1つのGitHubアカウントで作業したい。
PCを使用してGitHubをプッシュまたはプルしようとすると、ユーザー名とパスワードが必要になりますが、ラップトップを使用しているときは必要ありません。
とやり取りするたびにユーザー名とパスワードを入力したくありません origin
。ここで何が欠けていますか?
回答:
一般的な原因は、SSHではなくデフォルト(HTTPS)を使用して複製することです。これを修正するには、リポジトリに移動して[クローンまたはダウンロード]をクリックし、URLフィールドの上にある[Use SSH]ボタンをクリックして、次のようにオリジンリモートのURLを更新します。
git remote set-url origin git@github.com:username/repo.git
これは、GitHub:リモートURLをHTTPSからSSHに切り替えるで説明されています。
git remote set-url origin git://new.url.here
)
git remote set-url origin https://name:password@github.com/repo.git
(ここのコメントから抽出)
Permission denied (publickey)
このガイドの使用を修正:help.github.com/articles/generating-ssh-keys。
次のコマンドを実行して、資格情報のキャッシュを有効にします。
$ git config credential.helper store
$ git push https://github.com/owner/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 remote set-url origin https://git@github.com/<owner>/<repo>.git
これは2FAでも機能します
fatal: protocol 'https' is not supported
私は同じ問題に遭遇しました、そして私が見つけた最も簡単な解決策はHTTPSの代わりにSSH URLを使用することでした:
ssh://git@github.com/username/repo.git
そしてこれではありません:
https://github.com/username/repo.git
とではなく、SSHキーだけで検証できるようにusername
なりましたpassword
。
SSHに変更する以外に、パスワードを平文で入力することを気にしない場合は、HTTPSを使い続けることもできます。これをあなたの中に入れてください、~/.netrc
そしてそれはあなたのユーザー名/パスワードを要求しません(少なくともLinuxとMacでは):
machine github.com
login <user>
password <password>
追加(VonCの2番目のコメントを参照):Windowsではファイル名は%HOME%\_netrc
です。
暗号化する場合は、VonCの最初のコメントも読んでください。
Git 1.7.10以降を使用している場合に使用できるもう1つの追加(user137717のコメントを参照)。
認証ヘルパーを使用してGitHubパスワードをGitにキャッシュします。
HTTPSを使用してGitHubリポジトリのクローンを作成している場合は、資格情報ヘルパーを使用して、GitHubと通信するたびにGitHubのユーザー名とパスワードを記憶するようGitに指示できます。
これはLinux、Mac、Windowsでも機能します。
%HOME%\_netrc
(ではなく~/.netrc
)呼び出した場合、DOSセッションまたはWindowsのgit bashから完全に機能します。そのファイルを暗号化するには、stackoverflow.com / a / 18362082/6309も参照してください。
以前の答えで混乱している初心者のために、あなたは行うことができます:
git remote -v
のようなもので応答します
origin https://yourname@github.com/yourname/yourrepo.git (fetch)
origin https://yourname@github.com/yourname/yourrepo.git (push)
次に、他の多くの人が提案したコマンドを実行できますが、これで上からyournameとyourrepoがわかったのでyourname/yourrepo.git
、上からカットアンドペーストするだけです。
git remote set-url origin git@github.com:yourname/yourrepo.git
paraphrase
毎回お願いします。設定しませんでした
yourrepo
ますか?
git remote -v
と結果の確認
あなたはSSHを使用していて、自分の秘密鍵がパスフレーズで暗号化されている場合、あなたはまだあなたがGitリポジトリとネットワーク運用を行う際に、秘密鍵のパスフレーズ/パスワードを入力するように求められますようにpush
、pull
とfetch
。
毎回パスフレーズを入力する必要がないようにする場合は、を使用ssh-agent
して、ターミナルセッションごとに秘密鍵のパスフレーズ認証情報を保存できます。これについては、認証エージェントへの接続を開けませんでした:
$ eval `ssh-agent -s`
$ ssh-add
Windows msysgit Bashでは、の出力を評価ssh-agent
する必要がありますが、他の開発環境やオペレーティングシステムでも同じようにする必要があるかどうかはわかりません。
ssh-add
は.ssh
と呼ばれるホームフォルダーで秘密キーを検索しますid_rsa
。これはデフォルト名ですが、ファイルパスを別の名前のキーに渡すことができます。
ターミナルセッションが終了したらssh-agent
、killフラグを使用してシャットダウンできます-k
。
$ ssh-agent -k
ssh-agent
マニュアルで説明されているように:
-k
現在のエージェントを強制終了します(SSH_AGENT_PID環境変数で指定)。
また、次のようなオプションのタイムアウトパラメータを取ることもできます。
$ ssh-add -t <timeout>
どこ<timeout>
フォーマットである<n>h
ため<n>
時間、<n>m
のための<n>
分、というように。
ssh-agent
マニュアルによると:
-t life
エージェントに追加されるIDの最大存続時間のデフォルト値を設定します。存続時間は、秒単位で、またはsshd_config(5)で指定された時間形式で指定できます。ssh-add(1)を使用してIDに指定された有効期間は、この値をオーバーライドします。このオプションがない場合、デフォルトの最大存続期間は永久です。
Cygwinユーザーは、Cygwinでssh-agentを使用する場合の潜在的なセキュリティリスクに注意する必要があります。
Cygwin 1でのssh-agentの潜在的な危険性を認識する必要があります。ただし、ローカルのnetstatとリモートのポートスキャンでは、/ tmp / ssh-fooで指定されたポートに誰もがアクセスできるようには見えません...?
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
そして引用されたリンクで:
ただし、CygwinのUnixドメインソケットは根本的に安全ではないため、Cygwinでのssh-agentの使用はお勧めしません。
Cygwinでssh-agentを実行すると、
/tmp/ssh-$USERNAME/
ディレクトリにAF_UNIXソケットが作成されます。Cygwinでは、AF_UNIXソケットはAF_INETソケットを介してエミュレートされます。/tmp/ssh-$USERNAME/agent-socket-*
メモ帳でファイルを調べると、簡単に確認できます。次のようなものが表示されます!<socket >2080
その後、実行
netstat -a
して驚きます!ポート2080をリッスンしているプログラムがあります。これはssh-agentです。sshがサーバーからRSAチャレンジを受信すると、対応する/tmp/ssh-$USERNAME/agent-socket-*
(この場合はCygwinの下で、つまりへの接続が開かれることを意味しますlocalhost:2080
)を参照し、ssh-agentにRSAチャレンジを秘密鍵で処理するように要求します。単にssh-agentから受け取った応答をサーバーに渡します。Unixでは、プログラムがAF_UNIXソケットにアクセスしようとするとUnixカーネルがアクセス許可をチェックするため、このようなシナリオは問題なく機能します。ただし、AF_INETソケットの場合、接続は匿名です(「安全でない」と読みます)。Cygwin ssh-agentを実行していると想像してください。悪意のあるハッカーは、ボックスをポートスキャンし、ssh-agentが使用する開いているポートを見つけ、SSHサーバーへの接続を開き、そこからRSAチャレンジを受信し、見つけた開いているポートを介してssh-agentに送信し、受信します。 RSA応答、SSHサーバーに送信し、出来れば、彼/彼女はあなたとしてあなたのサーバーに正常にログインしました。
ソース:セットアップGit
次のコマンドは、パスワードをしばらくの間メモリに保存します(Git 1.7.10以降の場合)。
$ git config --global credential.helper cache
# Set git to use the credential memory cache
$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)
Gitプル&プッシュにhttpsを使用する場合remote.origin.url
は、プロジェクトを構成するだけで、プッシュするたびにユーザー名(またはパスワード)を入力する必要がなくなります。
設定方法remote.origin.url
:
URL形式: https:// {username:password @} github.com/ {owner} / {repo} URLのパラメータ: * username
オプション、必要なときに使用するユーザー名。
認証、 指定した場合、認証が必要なときにユーザー名を再入力する必要はありません。 メールを使用しないでください。「@」のないユーザー名を使用してください。使用しないと、URLを正しく解析できません。 *パスワード オプション、認証が必要なときに使用するパスワード。 指定した場合、認証が必要なときにパスワードを再入力する必要はありません。 ヒント: この値はプレーンテキストとして保存されるため、セキュリティ上の理由から、このパラメーターを指定しないでください。 * 例えば git config remote.origin.url https://eric@github.com/eric/myproject
ssh
セットアップ手順が少し複雑ssh
ですが、プロトコルを使用することは、よりも優れたソリューションだと思いますhttps
。
大まかな手順:
ssh-keygen
Linux、Windowsではmsysgit
同様のコマンドを提供)。~/.ssh
ます。そして、それをssh-add
コマンドを介してsshエージェントに追加します。remote.origin.url
Gitリポジトリをssh
スタイルに変更します。たとえば、git@gitlab.com:myaccount/myrepo.git
チップ:
https
とssh
プロトコルを切り替えます。単に変更remote.origin.url
するだけで十分ですが、repo_home/.git/config
直接編集して値を変更することもできます(vi
Linuxでの使用など)。
通常、プロトコルごとに行を追加し、を使用してそれらの1つをコメント化し#
ます。
例えば
[リモート「元」] url = git@gitlab.com:myaccount / myrepo.git #url = https://myaccount@gitlab.com/myaccount/myrepo.git フェッチ= + refs / heads / *:refs / remotes / origin / *
git-fetch(1)
は、git
/ ssh
ベースのURL についてのみ言及しています。
https://username:password@github.com/
も安全です。stackoverflow.com/questions/4980912/…を
GitHubパスワードをGitにキャッシュできます。
GitHubの公式ドキュメントの指示に従ってください。
上記のリンクからの指示に従うと、毎回ユーザー名/パスワードを入力しなくても、リポジトリにプッシュ/プルできます。
ここに別のオプションがあります:
書く代わりに
git push origin HEAD
あなたは書くことができます:
git push https://user:pass@yourrepo.com/path HEAD
明らかに、ほとんどのシェルでは、これによりパスワードが履歴にキャッシュされるため、それを覚えておいてください。
SSHキーまたは.netrc
ファイルが機能しなかった場合、もう1つの単純ですが安全性の低いソリューションは、git-credential-store-資格情報をディスクに保存するヘルパーです。
git config --global credential.helper store
デフォルトでは、資格情報はファイルに保存されます~/.git-credentials
。作成され、書き込まれます。
このヘルパーを使用すると、パスワードは暗号化されずにディスクに保存され、ファイルシステムの権限によってのみ保護されます。これが許容できるセキュリティのトレードオフではない場合。
同じ問題がありました。
.git/config
プロジェクトからファイルを変更しました
url = https://github.com/<your-user-here>/<your-repo-here>
に
url = git@github.com:<your-user-here>/<your-repo-here>
設定中のGitプロファイルにSSH公開鍵を追加しました。
SSH公開鍵の場合:
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa.pub
rsaキーを取得し、git Webポータル設定に貼り付けます。
HTTPSの更新:
GitHubは、HTTPSを使用しているときに資格情報を保存するWindows用の新しいプログラムを開始しました。
使用するには:
ここからプログラムをダウンロード
プログラムを実行すると、.gitconfig
ファイルが編集されます。.gitconfig
それらがいくつかある場合に備えて、正しく編集されているかどうかを再確認してください。正しいものを編集しなかった場合は、以下を追加してください.gitconfig
[credential]
helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
後の改行に注意してください[credential]
。必須です。
コマンドラインクライアントを開いて、git push origin master
一度試してください。パスワードの入力を求められたら、パスワードを入力すれば完了です。パスワードが保存されました!
基本的に2つのオプションがあります。
両方のマシンで同じユーザーを使用する場合は、.pubキーをPCにコピーする必要があるため、GitHubはあなたが同じユーザーであることを認識します。
PC用に新しい.pubファイルを作成し、マシンを別のユーザーとして扱いたい場合は、GitHub Webサイトで新しい.pubファイルを登録する必要があります。
それでも機能しない場合は、sshが正しく設定されておらず、sshがキーの場所を見つけられないことが原因である可能性があります。試す
ssh -vv username@github.com
SSHが失敗する理由の詳細を取得する。
Git設定ファイルを直接更新する(派手なコマンドを覚えたくない場合):
.git/config
お気に入りのテキストエディタでファイルを開きます。これは、クローンしたフォルダーまたは実行git init
したリポジトリーにあります。そのリポジトリーに移動します。.git
は隠しフォルダです。Ctrl+ を押すとH、隠しフォルダが表示されます(ls -a
ターミナル内)。
以下は.git/config
ファイルのサンプルです。これらの行をコピーして貼り付け、Git情報でこれらの行を更新してください。
[user]
name = Tux
email = tux@gmail.com
username = happy_feet
[remote "origin"]
url = https://github.com/happy_feet/my_code.git
fetch = +refs/heads/*:refs/remotes/origin/*
SSH用に次の形式でURL部分を変更します。
url = git@github.com:happy_feet/my_code.git
(上記の形式は、GitHubやBitbucketなどのさまざまなGitリモートサーバーで変更されません。バージョン管理にGitを使用している場合も同じです。):
注:リモートGitリポジトリに接続するSSHの方法では、Gitリモートサーバー(GitHubやBitbucketなど)に公開SSHキーを追加する必要があります。設定ページでSSHキーを検索してください。
SSH鍵の生成方法については、SSH鍵の 作成を参照してください。
これは私のために働いたものです:
git remote set-url origin https://username@github.com/username/reponame.git
例:
git remote set-url origin https://jsmith@github.com/jsmith/master.git
SSHではなくHTTPSのクローンを作成していて、プル、プッシュ、フェッチ時にユーザー名とパスワードのプロンプトで問題が発生している場合。この問題はUBUNTUで簡単に解決できます
手順1:ルートディレクトリに移動する
cd ~/
.git-credentialsファイルを作成する
このコンテンツをあなたusename
password
と一緒にそのファイルに追加してくださいgithosting URL
https://user:pass@example.com
次に、コマンドを実行します
git config --global credential.helper store
これで、手間をかけずにレポジトリからすべての詳細をプルプッシュおよびフェッチできるようになります。
WindowsでGit(たとえば、Git Bash)を使用している場合(およびHTTPSからSSHに切り替えたくない場合)、Git Credential Manager for Windowsも使用できます。
このアプリケーションは、ユーザー名とパスワードを保持します...
多くのユーザーが言っているように、GitリポジトリのURLをHTTPSからSSHに変更するだけです。
マシンでSSHキーを生成していない場合は、SSHキーを生成する必要があります。
追加情報として、この変更を行った後も同じエラーが発生していました。
アクセス拒否。
私の場合、問題はWindowsシェルを使用してnghコマンドを実行していたことでした。このコマンドは、SSHフレーズを要求するプロンプトを開く必要があり、Windowsシェルはこれらの種類のプロンプトを開かないため、認証は失敗しました。
したがって、Gitシェルを開いてnghコマンドを実行し、SSHフレーズを要求するたびにプロンプトに「voilà」と入力するだけで問題なく動作しました。
# create the company identity file
ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
# save private key to ~/.ssh/id_rsa.corp,
cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys
# create your private identify file
ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
# save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys
# clone company internal repo as follows
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git clone git@git.in.corp.com:corp/project.git
export git_msg="my commit msg with my corporate identity"
git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git push
# clone public repo as follows
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git clone git@github.com:acoolprojectowner/coolproject.git
export git_msg="my commit msg with my personal identity"
git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git push
# stop :: how-to use different ssh identity files