gitリポジトリをsshに複製しました。そのため、プッシュまたはプルしてオリジンマスターと通信するたびに、パスワードを再入力する必要があります。パスワードを複数回入力する必要がないようにgitを構成するにはどうすればよいですか?
14 に答える
HTTPSプロトコルを使用していたため、GitHubでも同様の問題が発生しました。使用しているプロトコルを確認するには、
git config -l
で始まる行を見てくださいremote.origin.url
。プロトコルを切り替えるには
git config remote.origin.url git@github.com:your_username/your_project.git
試してみてください、あなたはあなたの秘密鍵を実行して保持しているssh-add
必要がありますssh-agent
(わかりました。更新された質問に答えて、Jefromiが説明しssh-keygen
たように、最初に公開鍵と秘密鍵を生成します。公開鍵をサーバーに配置します。プレーンに相当するものがない場合は、パスフレーズを使用する必要があります。 -秘密鍵のテキストパスワード。ただし、その場合は、以下で説明するように、実際的な問題として必要になります。) ssh-agent
ログイン時にバックグラウンドで実行する必要がありssh-agent
ます。ログインしたらssh-add
、エージェントにパスフレーズを与えてキーをデコードするために、1回だけ実行することをお勧めします。その後、エージェントはキーのロックを解除してロードした状態でメモリに常駐し、どこかでsshを実行するたびに使用できるようになります。
その後、すべてのssh-familyコマンド1がエージェントに相談し、自動的に秘密鍵を使用できるようになります。
OSX(err、macOS)では、GNOMEおよびKDEシステムssh-agent
は通常自動的に起動されます。私のように、Cygwinまたは他のWindows環境があり、これが確実に行われない場合に備えて、詳細を説明します。
ここから始めてください:man ssh-agent
。
エージェントを自動的に実行するには、さまざまな方法があります。マニュアルページで説明されているように、ログインセッションの他のすべてのプロセスの親になるように実行できます。そうすれば、それが提供する環境変数は自動的にすべてのシェルに含まれます。(後で)呼び出すとssh-add
、またはssh
両方がエージェントにアクセスできるようになります。これは、すべてにマジックソケットパス名などの環境変数があるためです。
または、エージェントを通常の子として実行し、環境設定をファイルに保存して、起動時にすべてのシェルでそのファイルを調達することもできます。
私のOSXおよびUbuntuシステムは、エージェントの起動セットアップを自動的に実行するため、実行する必要があるのはssh-add
1回だけです。実行ssh-add
してみて、機能するかどうかを確認してください。機能する場合は、再起動ごとに1回実行する必要があります。
私のCygwinシステムでは手動で行う必要があったので、これを自分で行いました。ソース.profile
があります。.bashrc
.profile
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
.agent
ファイルはスクリプトによって自動的に作成されます。これには、環境変数の定義とエクスポートが含まれています。上記は、.agentファイルのソースを取得してから、エージェントを取得しようとしますps(1)
。動作しない場合は、エージェントを起動して新しいエージェントファイルを作成します。実行するだけでssh-add
、失敗した場合はエージェントを起動することもできます。
1.そして
sudo
、適切なpam拡張子を持つローカルおよびリモートでも。
これは、gitではなくsshの設定に関するものです。まだ行っていない場合は、ssh-keygen
(空白のパスフレーズを使用して)キーペアを作成する必要があります。次に、を使用して公開鍵をリモートの宛先にコピーしますssh-copy-id
。複数のキーが必要な場合(たとえば、他の目的でパスフレーズを使用したより安全なキー)、または非常に奇妙な複数のIDが実行されている場合を除いて、これは単純です。
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
編集:あなたは本当にDigitalRossの答えを読むべきです、しかし:パスフレーズでキーを使うなら、あなたはssh-add <key-file>
それらを追加するために使う必要があります(そしてあなたのディストリビューションがまだあなたのためにそれを実行していないならssh-agent
明らかに起動します)。ssh-agent
リポジトリのクローンを作成したときに、HTTPS ではなく SSH URL を使用したことを確認してください。リポジトリのクローン URL ボックスで、URL をコピーする前に SSH プロトコルを選択します。下の画像を参照してください。
git-bash またはターミナルでコマンドを実行するよりもファイルを直接編集することを好む人のために、Muein の考えを拡張します。
プロジェクトの .git ディレクトリ (ローカル マシンのプロジェクト ルート) に移動し、「config」ファイルを開きます。[remote "origin"] を探して、次のように URL 構成を設定します。
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
ここには 2 つの異なる点があると思います。1 つ目は、通常の SSH 認証では、ユーザーがアカウントのパスワードを入力する必要があることです (アカウントのパスワードは、sshd 構成に応じてさまざまな方法で認証されます)。
証明書を使用してそのパスワードを入力することを避けることができます。証明書の場合もパスワードを入力する必要がありますが、今回は秘密鍵のパスワードです (アカウントのパスワードとは無関係です)。
これを行うには、steveth45 によって指摘された指示に従うことができます。
公開鍵認証あり。
毎回証明書のパスワードを入力するのを避けたい場合は、DigitalRoss が指摘しているように、ssh-agent を使用できます。
これを行う正確な方法は、Unix と Windows によって異なりますが、基本的にはログイン時にバックグラウンドで ssh-agent を実行する必要があり、最初のログイン時に ssh-add を実行してエージェントにパスフレーズを与えます。次に、すべての ssh-family コマンドがエージェントに問い合わせて、パスフレーズを自動的に取得します。
ここから始めます: man ssh-agent.
ssh-agent の唯一の問題は、少なくとも *nix では、すべての新しいシェルに証明書のパスワードを設定する必要があることです。そして、証明書が「ロード」され、パスワードを入力せずにそれを使用して ssh サーバーに対して認証を行うことができます。しかし、これはその特定のシェルにあります。
キーチェーンを使用すると、ssh-agent と同じことを「システム全体」で行うことができます。コンピューターの電源を入れたら、シェルを開き、証明書のパスワードを入力します。そして、他のすべてのシェルはその「ロードされた」証明書を使用し、PC を再起動するまでパスワードを再度尋ねられることはありません。
Gnome には、 Gnome Keyringと呼ばれる同様のアプリケーションがあり、最初に使用するときに証明書のパスワードを要求し、それを安全に保存するため、再度要求されることはありません。
ssh-keygen -t rsa
パスフレーズを求められたら、空白のままにします。つまり、Enter キーを押します。それと同じくらい簡単です!!
github を使用している場合は、(少なくとも私には) より明確に説明する非常に優れたチュートリアルがあります。
sshキーによるログインを許可せず、ユーザー/パスワードのみを使用するサーバーからgitリポジトリを複製する必要がありました。シンプルなユーザー/パスワードの組み合わせを使用するように Git プラグインを構成する方法が見つからなかったので、ツールの期待 (apt-get install expect) に依存する Linux ビルド マシンのビルド前のステップとして、次のシェル コマンドを追加しました。
これは、パスワードが JENKINS ジョブの構成とログにクリア テキストとして表示されるため、この問題を解決する良い方法ではありません。RSA キー認証またはその他の構成の可能性を構成する方法がない場合にのみ使用してください。
rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
AWS インスタンスから git clone できるように、これらの提案をすべて試してみました。何も機能しませんでした。私は最終的に必死になってごまかしました: id_rsa.pub の内容をローカルマシンにコピーし、それを AWS インスタンスの ~/.ssh/known_hosts に追加しました。