Getting ssh-agent to work with git run from windows command shell

后端 未结 7 1346
遥遥无期
遥遥无期 2020-12-04 07:09

I have msysgit installed, with OpenSSH. I am connecting to a gitosis repo. From the git bash, I have created a .profile file that runs ssh-agent (if not already

相关标签:
7条回答
  • 2020-12-04 07:15

    I had the same problem as you, then I tried adding this code

    #! /bin/bash 
    eval `ssh-agent -s` 
    ssh-add ~/.ssh/*_rsa
    

    into file .bashrc in my home directory. And it works!

    0 讨论(0)
  • 2020-12-04 07:16

    I found the smoothest way to achieve this was using Pageant as the SSH agent and plink.

    You need to have a putty session configured for the hostname that is used in your remote.

    You will also need plink.exe which can be downloaded from the same site as putty.

    And you need Pageant running with your key loaded. I have a shortcut to pageant in my startup folder that loads my SSH key when I log in.

    When you install git-scm you can then specify it to use tortoise/plink rather than OpenSSH.

    The net effect is you can open git-bash whenever you like and push/pull without being challenged for passphrases.

    Same applies with putty and WinSCP sessions when pageant has your key loaded. It makes life a hell of a lot easier (and secure).

    0 讨论(0)
  • 2020-12-04 07:18

    You could wrap your git executable with a script that sources your .profile, causing the ssh-agent environment variables to be loaded.

    Either put a script called git in a directory earlier in your path than the real git, or configure the git extensions to call your wrapper in place of the real git.

    0 讨论(0)
  • 2020-12-04 07:27

    For msysgit you might have to modify a bit the solution offered by 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
    

    As you may notice the only change I did was in the ps call, since msysgit don't use -U but -u

    0 讨论(0)
  • 2020-12-04 07:31

    On Windows 10 this worked for me

    1. run git bash
    2. touch ~/.profile
    3. start ~/.profile to open .profile
    4. add the following to .profile
    #! /bin/bash 
    eval `ssh-agent -s` 
    ssh-add ~/.ssh/*_rsa
    

    This is based on this answer. The only difference is that .bashrc did not work, instead .profile worked.

    0 讨论(0)
  • 2020-12-04 07:34

    Even though you've probably solved it... use the eval command to make the ssh_agent process stick:

    eval `ssh-agent.exe`
    

    Then use ssh-add to add the keys you need.

    0 讨论(0)
提交回复
热议问题