38

OpenSSHを使用してmsysgitをインストールしました。gitosis レポに接続しています。git bash から、このスクリプトを使用.profileして、git bash が開かれるたびに ssh-agent (まだ実行されていない場合) を実行するファイルを作成しました

SSH_ENV=$HOME/.ssh/environment

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
     echo succeeded
     chmod 600 ${SSH_ENV}
     . ${SSH_ENV} > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

また、git bash ではなく、Windows コマンド プロンプトから git コマンドを実行する git 拡張機能も使用しています。そのため、ssh は実行中の ssh-agent を認識しません。これを修正することは可能ですか?

4

7 に答える 7

27

msysgit の場合、https: //help.github.com/articles/working-with-ssh-key-passphrases が提供するソリューションを少し変更する必要があるかもしれません

declare -x 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 -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
  test_identities
    fi
else
    if [ -f "$SSH_ENV" ]; then
    . "$SSH_ENV" > /dev/null
    fi
    ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
        test_identities
    else
        start_agent
    fi
fi

お気づきかもしれませんが、msysgit は -U ではなく -u を使用するため、私が行った唯一の変更は ps 呼び出しでした。

于 2013-04-08T02:33:59.803 に答える
23

おそらく解決したとしても...evalコマンドを使用してssh_agentプロセスを固定します:

eval `ssh-agent.exe`

次に、ssh-add を使用して必要なキーを追加します。

于 2011-11-10T12:54:07.807 に答える
2

これを実現する最もスムーズな方法は、Pageant を SSH エージェントと plink として使用することでした。

リモートで使用されるホスト名用に構成されたパテ セッションが必要です。

パテと同じサイトからダウンロードできる plink.exe も必要です。

また、キーをロードした状態で Pageant を実行する必要があります。ログイン時に SSH キーを読み込む pageant へのショートカットがスタートアップ フォルダーにあります。

git-scm をインストールすると、OpenSSH ではなく tortoise/plink を使用するように指定できます。

最終的な効果は、いつでも git-bash を開いて、パスフレーズを求められることなくプッシュ/プルできることです。

ページェントにキーが読み込まれている場合、パテと WinSCP セッションにも同じことが当てはまります。それは人生を非常に簡単に(そして安全に)します。

于 2015-03-04T00:51:30.047 に答える
1

git 実行可能ファイルを をソースとするスクリプトでラップして.profilessh-agent環境変数をロードすることができます。

実際の git より前のパスのディレクトリに呼び出されるスクリプトを配置するかgit、実際の git の代わりにラッパーを呼び出すように git 拡張機能を構成します。

于 2011-06-03T12:17:31.447 に答える