代码之家  ›  专栏  ›  技术社区  ›  reprogrammer

通过ssh配置git以登录一次

  •  174
  • reprogrammer  · 技术社区  · 16 年前

    我已经通过ssh克隆了我的Git存储库。因此,每次我通过推或拉与原始主机通信时,都必须重新输入密码。如何配置Git,使我不需要多次输入密码?

    14 回复  |  直到 8 年前
        1
  •  91
  •   Community Mohan Dere    9 年前

    尝试 ssh-add 你需要 ssh-agent 运行并持有您的私钥

    (好的,回答更新后的问题,您首先运行 ssh-keygen 将公钥和私钥生成为 Jefromi explained . 您将公钥放在服务器上。您应该使用一个密码短语,如果您没有,您的私钥中就有一个相当于纯文本密码的密码。但当你这样做的时候,你需要作为一个实际问题 SSH剂 如下文所述。)

    你想跑步 SSH剂 在后台登录。一旦你登录,想法就是运行 SSH添加 一次又一次,为了给代理你的密码,解码你的密钥。然后,代理只需将您的密钥解锁并加载到内存中,随时可以在某个地方使用ssh。

    所有ssh系列命令 然后将咨询代理并自动使用您的私钥。

    关于OSX(Err, 马科斯 ,gnome和kde系统, SSH剂 通常为您自动启动。我将详细介绍一下,以防像我一样,您也有一个Cygwin或其他Windows环境,在这里,这肯定不是为您做的。

    从这里开始: man ssh-agent .

    有多种方法可以自动运行代理。正如手册页所解释的,您可以运行它,使它成为所有登录会话的其他进程的父进程。这样,它提供的环境变量将自动出现在所有shell中。当你(以后)调用 SSH添加 ssh 两者都可以访问代理,因为它们都有具有magic socket路径名的环境变量。

    或者,您可以将代理作为普通的子级运行,将环境设置保存在一个文件中,并在每个shell启动时在其中源代码该文件。

    我的OSX和Ubuntu系统会自动执行代理启动设置,所以我所要做的就是运行 SSH添加 一次。尝试跑步 ssh添加 看看它是否工作,如果是这样,那么每次重新启动时只需要这样做一次。

    我的Cygwin系统需要手动完成,所以我在 .profile 我有 .bashrc 来源 轮廓 以下内容:

    . .agent > /dev/null
    ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
            ssh-agent > .agent
            . .agent > /dev/null
    }
    

    这个 .agent 文件由脚本自动创建;它包含环境变量定义和导出。上面的代码尝试源于.agent文件,然后尝试 ps(1) 代理人。如果不起作用,它将启动一个代理并创建一个新的代理文件。你也可以跑步 SSH添加 如果失败,启动一个代理。


    1。甚至本地和远程 sudo 使用正确的PAM扩展。
        2
  •  263
  •   ΩmegaMan    8 年前

    Github也有类似的问题,因为我使用的是HTTPS协议。要检查您使用的协议,请运行

    git config -l
    

    看看这条线从 remote.origin.url . 切换协议

    git config remote.origin.url git@github.com:your_username/your_project.git
    
        3
  •  22
  •   Cascabel    16 年前

    这是关于配置ssh,而不是git。如果你还没有,你应该用 ssh-keygen (使用空白密码短语)创建密钥对。然后,将公钥复制到远程目标 ssh-copy-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剂 如果您的发行版还没有为您运行一个)。

        4
  •  21
  •   Zorayr    12 年前

    确保克隆存储库时使用的是ssh URL而不是https;在repo的克隆URL框中,在复制URL之前选择ssh协议。见下图:

    enter image description here

        5
  •  7
  •   uchamp    13 年前

    为那些喜欢直接编辑文件而不是在GitBash或终端中运行命令的人扩展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
    
        6
  •  7
  •   Nishant Thapliyal    8 年前

    如果您使用 HTTPS (建议)然后:

    git config --global credential.helper cache
    

    然后

    git config --global credential.helper 'cache --timeout=2592000'
    
    • 超时=2592000(30天以秒计)以启用30天(或任何套件)的缓存。

    • 现在运行一个需要用户名和密码的简单git命令。

    • 输入您的凭据一次,现在缓存已启用30天。

    • 使用任何git命令重试,现在您不需要任何凭据。

    • 更多信息: Caching your GitHub password in Git

    注释 : 您需要git 1.7.10或更高版本才能使用凭证助手。重新启动系统时,可能需要再次输入密码。

        7
  •  6
  •   user793375 Gaston    14 年前

    我想这里有两种不同的东西。第一个问题是,正常的ssh身份验证要求用户输入帐户的密码(根据sshd配置,将根据不同的方法对帐户密码进行身份验证)。

    您可以避免使用证书输入密码。对于证书,您仍然需要输入密码,但这一次是您的私钥的密码(与帐户密码无关)。

    要做到这一点,您可以遵循Steveth45所指出的说明:

    Public Key Authentication .

    如果您想避免每次都输入证书的密码,那么您可以使用ssh代理,正如DigitalRoss指出的那样。

    具体的方法取决于Unix和Windows,但本质上您需要在登录时在后台运行ssh代理,然后在第一次登录时运行ssh add以向代理提供密码短语。然后,所有ssh系列命令都将咨询代理并自动获取您的密码短语。

    从这里开始:man ssh agent。

    ssh代理的唯一问题是,至少在*nix上,您必须在每个新shell上输入证书密码。然后证书被“加载”,您可以使用它对ssh服务器进行身份验证,而无需输入任何类型的密码。但这是在特定的外壳上。

    keychain 您可以执行与ssh代理相同的操作,但“系统范围”。打开计算机后,打开外壳并输入证书的密码。然后,其他所有shell都将使用该“已加载”证书,并且在您重新启动PC之前,不会再询问您的密码。

    gnome有一个类似的应用程序,叫做 Gnome Keyring 这会在您第一次使用证书时询问您的密码,然后它会安全地存储它,这样您就不会再被询问了。

        8
  •  4
  •   Miles    14 年前

    如果您使用的是Github,他们有一个非常好的教程可以更清楚地解释它(至少对我来说)。

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

        9
  •  4
  •   Tim seongjoo    14 年前
    ssh-keygen -t rsa
    

    当要求输入密码时,请将其留空,即只需按Enter。 就这么简单!!

        10
  •  3
  •   toonsend    12 年前

    从你推的盒子里试试这个

        ssh git@github.com
    

    然后你应该从Github得到一个欢迎的回复,然后就可以推了。

        11
  •  1
  •   Jan    11 年前

    我不得不从一个不允许登录VIE SSH密钥但只允许使用用户/密码的服务器上克隆Git repo。我找不到将Git插件配置为使用简单的用户/密码组合的方法,因此我在Linux构建机器上添加了以下shell命令作为预构建步骤,该机器取决于工具expect(apt get install expect):

    这不是解决这个问题的好方法,因为您的密码在Jenkins作业的配置和日志中显示为明文!只有在无法配置RSA-KEY身份验证或其他配置可能性时才使用它!

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

    添加单行 AddKeysToAgent yes 在.ssh/config文件的顶部。当然,ssh代理必须预先运行。如果它没有运行(检查 prep ssh-agent ,然后简单地运行它 eval $(ssh-agent)

    现在,密钥被加载到整个系统的内存中,您不必再次输入密码短语。

    解决方案的来源是 https://askubuntu.com/questions/362280/enter-ssh-passphrase-once/853578#853578

        13
  •  0
  •   David Blay    13 年前

    我一直试图避免键入密码短语,因为我在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
    

    所以有了这个,我在一次会话中键入一次密码。

        14
  •  -1
  •   alansendgi    12 年前

    我尝试了所有这些建议和更多,只是为了能够从我的AWS实例中进行Git克隆。什么都没用。我终于摆脱了绝望:我复制了本地计算机上id_rsa.pub的内容,并将其附加到我的AWS实例上的~/.ssh/known_主机上。