web-dev-qa-db-ja.com

一度ログインするようにGit over SSHを設定する

私はgshリポジトリをssh上にクローンしました。そのため、プッシュまたはプルしてOriginのマスターと通信するたびに、パスワードを再入力する必要があります。パスワードを何度も入力する必要がないようにgitを設定するにはどうすればいいですか?

177
reprogrammer

ssh-addを試してみてください。あなたは秘密鍵を実行して保持するためにssh-agentが必要です

(さて、更新された質問に答えて、あなたはまずパブリックキーとプライベートキーを Jefromi説明 として生成するためにssh-keygenを実行します。あなたはサーバーにパブリックキーを置きます。パスフレーズ、秘密鍵にプレーンテキストのパスワードと同等のパスワードがない場合は、実際には、次に説明するようにssh-agentが必要です。)

あなたはログインしている間バックグラウンドでssh-agentを実行したいと思うでしょう。ログインしたら、あなたの鍵を解読するためにエージェントにあなたのパスフレーズを与えるためにssh-addを一度だけ実行することです。エージェントはあなたの鍵がロック解除されロードされた状態でメモリに座るだけで、どこかにSSH接続するたびに使えるようになります。

すべてのsshファミリーのコマンド1 それからエージェントに相談し、自動的にあなたの秘密鍵を使うことができるでしょう。

OSX(err、macOS)、GNOMEおよびKDEシステムでは、ssh-agentが通常自動的に起動されます。私の場合と同じように詳細を説明します。あなたはCygwinや他のwindows環境も持っています。

ここから始めてください:man ssh-agent

エージェントを自動的に実行するにはさまざまな方法があります。 manページで説明しているように、ログインセッションの他のすべてのプロセスの親になるように実行することができます。そうすれば、それが提供する環境変数は自動的にすべてのシェルに入ります。 (後で)ssh-addまたはsshを呼び出すと、両方ともマジックソケットパス名などの環境変数を持っているため、両方ともエージェントにアクセスできます。

あるいは、通常の子としてエージェントを実行し、環境設定をファイルに保存し、起動時にすべてのシェルでそのファイルを取得することもできます。

私のOSXとUbuntuシステムは自動的にエージェントの起動設定を行いますので、ssh-addを一度実行するだけです。 ssh-addを実行し、それが機能するかどうかを確認してください、そうであれば、あなたはただ再起動ごとに一度それを行う必要があります。

私の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.そして、正しいpam拡張子を持つローカルおよびリモートのSudoでも構いません。
94
DigitalRoss

HTTPSプロトコルを使用していたため、GitHubにも同様の問題がありました。使用しているプロトコルを確認するには、単に実行します。

git config -l

そしてremote.Origin.urlで始まる行を見てください。プロトコルを切り替えるには

git config remote.Origin.url [email protected]:your_username/your_project.git
271
Muein Muzamil

これは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を起動します)ディストリビューションでまだ実行されていない場合)。

23
Cascabel

リポジトリのクローンを作成したときは、HTTPSではなくSSH URLを使用してクローンを作成したことを確認してください。リポジトリの[クローンURL]ボックスで、URLをコピーする前にSSHプロトコルを選択します。下の画像を参照してください。

enter image description here

21
Zorayr

HTTPS(推奨)を使用してクローンを作成した場合: -

git config --global credential.helper cache

その後

git config --global credential.helper 'cache --timeout=2592000'
  • timeout = 2592000(30日数)で30日間キャッシュを有効にします。

  • 今すぐあなたのユーザー名とパスワードを必要とする簡単なgitコマンドを実行してください。

  • 資格情報を一度入力すると、キャッシュは30日間有効になります。

  • どのgitコマンドでもやり直すと、今度は資格情報は必要ありません。

  • より詳しい情報は: - GitでGitHubのパスワードをキャッシュする

信任状ヘルパーを使用するにはGit 1.7.10以降が必要です。システムの再起動時に、パスワードを再入力する必要があるかもしれません。

9

Git-bashやterminalでコマンドを実行するよりも直接ファイルを編集したい人のためのMueinの考えを拡張する。

プロジェクトの.gitディレクトリ(ローカルマシンのプロジェクトルート)に行き、 'config'ファイルを開きます。それから[remote "Origin"]を探し、url configを以下のように設定します。

[remote "Origin"]
    #the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
    url = [email protected]:<username>/<projectname>.git
7
uchamp

ここには2つの異なることがあると思います。 1つ目は、通常のSSH認証ではユーザーがアカウントのパスワードを入力する必要があるということです(アカウントのパスワードはsshdの設定に応じてさまざまな方法で認証されます)。

証明書を使ってそのパスワードを入力することを避けることができます。証明書を使ってもパスワードを入力する必要がありますが、今回はあなたの秘密鍵のパスワードです(アカウントのパスワードとは関係ありません)。

これを行うには、steveth45によって指摘された指示に従うことができます。

公開鍵認証

証明書のパスワードを毎回入力したくない場合は、DigitalRossで指摘されているようにssh-agentを使用できます。

これを行う正確な方法はUnixとWindowsに依存しますが、基本的にあなたがログインするときバックグラウンドでssh-agentを実行する必要があり、そしてあなたが最初にログインするとき、エージェントにあなたのパスフレーズを与えるためにssh-addを実行します。すべてのssh-familyコマンドはエージェントに問い合わせて、自動的にあなたのパスフレーズを選びます。

ここから始めてください:man ssh-agent。

Ssh-agentの唯一の問題は、少なくとも* nixでは、すべての新しいシェルに証明書パスワードを設定する必要があるということです。そして証明書は "ロード"され、あなたはそれをsshサーバに対して認証するためにどんな種類のパスワードも入れずに使うことができます。しかし、これはその特定のシェルにあります。

keychain を使うと、ssh-agentと同じことができますが、「システム全体」です。コンピュータの電源を入れたら、シェルを開いて証明書のパスワードを入力します。そして、他のすべてのシェルはその「ロードされた」証明書を使用し、あなたのPCを再起動するまであなたのパスワードは二度と尋ねられることはありません。

Gnomeには Gnome Keyring と呼ばれる同様のアプリケーションがあります。これは、初めて使用するときに証明書のパスワードを要求し、それを安全に保存するので、二度と尋ねられることはありません。

6
Gaston
ssh-keygen -t rsa

パスフレーズを要求されたら、それを空白のままにしてください、すなわち単にenterを押してください。それと同じくらい簡単!

4

もしあなたがgithubを使っているのであれば、彼らはそれをもっとはっきりと説明してくれる(少なくとも私には)とても素敵なチュートリアルを持っています。

http://help.github.com/set-up-git-redirect/

4
Miles

押しているボックスからこれを試してください

    ssh [email protected]

それならgithubから歓迎される反応を得るはずですし、それからPushまでうまくいくでしょう。

3
toonsend

私はログインvie sshキーを許可しないがユーザー/パスワードだけでgitリポジトリをクローンしなければなりませんでした。単純なユーザー/パスワードの組み合わせを使うようにGitプラグインを設定する方法が見つからなかったので、期待するツールに依存するLinuxビルドマシンでのビルド前の手順として次のシェルコマンドを追加しました(apt-get install expect):

このISはあなたのパスワードISとしてのこの問題を解決する良い方法ではありません。 IS RSAキー認証ORその他の設定候補を設定する方法がない場合は、それを使用してください。

rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
2
Jan

.ssh/configファイルの先頭に1行AddKeysToAgent yesを追加します。もちろん、ssh-agentは事前に実行されている必要があります。実行されていない場合(prep ssh-agentで確認)、その後単に実行してくださいeval $(ssh-agent)

これで、キーはシステム全体でメモリにロードされ、パスフレーズをもう一度入力する必要がなくなりました。

解決策の出所は https://askubuntu.com/questions/362280/enter-ssh-passphrase-once/853578#853578 です。

1
infoclogged

私はWindows上でSSHを使用しているので私はいつもパスフレーズを入力することを避けようとしています。私は自分の.profileファイルを修正して、特定のセッションでパスフレーズを入力するようにしました。だからこれはコードの一部です:

    SSH_ENV="$HOME/.ssh/environment"

    # start the ssh-agent
    function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
        echo succeeded
        chmod 600 "$SSH_ENV"
        . "$SSH_ENV" > /dev/null
        ssh-add
    }

    # test for identities
    function test_identities {
        # test whether standard identities have been added to the agent already
        ssh-add -l | grep "The agent has no identities" > /dev/null
        if [ $? -eq 0 ]; then
            ssh-add
            # $SSH_AUTH_SOCK broken so we start a new proper agent
            if [ $? -eq 2 ];then
                start_agent
            fi
        fi
    }

    # check for running ssh-agent with proper $SSH_AGENT_PID
    if [ -n "$SSH_AGENT_PID" ]; then
        ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
        if [ $? -eq 0 ]; then
      test_identities
        fi
    # if $SSH_AGENT_PID is not properly set, we might be able to load one from
    # $SSH_ENV
    else
        if [ -f "$SSH_ENV" ]; then
      . "$SSH_ENV" > /dev/null
        fi
        ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
        if [ $? -eq 0 ]; then
            test_identities
        else
            start_agent
        fi
    fi

だからこれで私は一度セッションで私のパスフレーズを入力してください..

0
David Blay