如何防止每次在Windows上使用Git Bash时都要输入密码来解密私钥?

D.G*_*chi 124 windows git passwords ssh-keys

我有一个自动构建服务,可以从git私有存储库下载.问题是,当它试图克隆存储库时,它需要提供密码,因为它不会被记住; 因为没有人工交互,它会永远等待密码.如何从id_rsa.pub强制记住它?

sta*_*key 253

对于Windows用户,只需注意这是我设置Git Bash环境以便在启动时登录一次的方式.我编辑〜/ .bashrc:

eval `ssh-agent`
ssh-add
Run Code Online (Sandbox Code Playgroud)

所以当我启动Git Bash时,它看起来像:

Welcome to Git (version 1.7.8-preview20111206)
(etc)
Agent pid 3376
Enter passphrase for /c/Users/starmonkey/.ssh/id_dsa:
Identity added: /c/Users/starmonkey/.ssh/id_dsa (/c/Users/starmonkey/.ssh/id_dsa)
Run Code Online (Sandbox Code Playgroud)

现在我可以ssh到其他服务器而无需每次都登录.

我知道这是一个老问题,但我今天从谷歌搜索来到这里,所以我希望这对其他人有帮助.

  • 对我来说,这种语法不起作用.我不得不写'eval $(ssh-agent)`. (14认同)
  • 如果你没有〜/ .bashrc文件,那么只需创建一个新的文本文件(记事本或其他编辑器)并添加提到的两行starmonkey. (9认同)
  • '〜'指的是你的"主目录".在Windows中,您可以通过打开命令shell(cmd)并键入"echo%USERPROFILE%"来找到它. (7认同)

Ste*_*ung 60

这个答案解释了如何永久存储GitHub用户名和密码,而不是SSH密钥密码.

在Windows中,只需运行 __CODE__

这意味着下次推送时,您将像往常一样输入用户名和密码,但它们将保存在Windows凭证中.之后你不必再输入它们了.

http://www.tilcode.com/push-github-without-entering-username-password-windows-git-bash/

  • 这是与SSH密钥有关,还是仅与HTTPS(用户名和密码)进行身份验证?问题似乎是关于使用SSH密钥. (5认同)
  • 在此命令之后,您需要键入您的用户名和密码. (2认同)

Con*_*nan 8

打开新终端时,我不想输入我的ssh密码; 不幸的是,starmonkey的解决方案需要在每个会话中输入密码.相反,我在我的.bash_profile:

# Note: ~/.ssh/environment should not be used, as it
#       already has a different purpose in SSH.

env=~/.ssh/agent.env

# Note: Don't bother checking SSH_AGENT_PID. It's not used
#       by SSH itself, and it might even be incorrect
#       (for example, when using agent-forwarding over SSH).

agent_is_running() {
    if [ "$SSH_AUTH_SOCK" ]; then
        # ssh-add returns:
        #   0 = agent running, has keys
        #   1 = agent running, no keys
        #   2 = agent not running
        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
    else
        false
    fi
}

agent_has_keys() {
    ssh-add -l >/dev/null 2>&1
}

agent_load_env() {
    . "$env" >/dev/null
}

agent_start() {
    (umask 077; ssh-agent >"$env")
    . "$env" >/dev/null
}

if ! agent_is_running; then
    agent_load_env
fi

# If your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

unset env
Run Code Online (Sandbox Code Playgroud)

这将记住我的新终端会话的密码; 当我在启动后打开第一个终端时,我只需要输入一次.

我想相信我得到的地方,这是对其他人工作的修改,但我不记得它来自哪里.谢谢匿名作者!

更新07/01/2019:我不认为这一切都是必要的.我现在一直通过确保.bash_profile运行ssh-agent来完成这项工作:

eval $(ssh-agent)
Run Code Online (Sandbox Code Playgroud)

然后我像这样设置一个ssh配置文件:

touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


mil*_*ose 5

如果我正确理解了这个问题,那么您已经在构建服务中使用了授权的 SSH 密钥,但是您想避免为每个克隆键入密码?

我可以想到两种方法来做到这一点:

  1. 如果您的构建服务以交互方式启动:在您启动构建服务之前,ssh-agent以足够长的超时(-t选项)启动。然后ssh-add在开始构建服务之前使用(msysGit 应该有这些)添加您需要的所有私钥。您仍然需要输入所有密码,但每次服务启动只需输入一次。

  2. 如果您想完全避免输入密码,您可以随时从 SSH 密钥中删除密码,如https://serverfault.com/questions/50775/how-do-i-change-my- 中所述private-key-passphrase,通过设置一个空的新密码。这应该完全消除密码提示,但它比前一个选项更不安全。


bed*_*uin -1

您需要在要连接到存储库服务器的用户的文件夹authorized_keys下创建该文件。.ssh例如,假设您使用用户名buildservice,则repo.server可以运行:

cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

然后你必须检查以下几件事:

  1. 相应的id_rsa私钥出现在 中builservice@build.server:~/.shh/id_rsa

  2. repo.server 的指纹存储在buildservice@build.server:~/.ssh/known_hosts文件中。通常,这将在第一次尝试ssh连接到repo.server.

  • 嗯.. Git bash 拥有一切,请仔细阅读问题的标题。另外,从问题中我假设密钥对已经生成(因为有人询问如何强制存储库服务器记住 id_rsa.pub。)对于格式化感到抱歉。 (5认同)
  • 警告!使用“cat id_rsa.pub > .ssh/authorized_keys”将覆盖任何现有的授权密钥。使用“>>”添加而不是覆盖。 (3认同)