Answers:
对于Windows用户,请注意,这是我设置Git Bash环境以使其在启动时登录一次的方式。我编辑我的~/.bashrc
文件:
eval `ssh-agent`
ssh-add
因此,当我启动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)
现在,我无需每次登录即可连接到其他服务器。
eval $(ssh-agent)
。
ssh-add ~/.ssh/myfile_rsa
copy > ~/.bashrc
在git bash中在Windows中创建bashrc文件,忽略该错误
该答案说明了如何获取GitHub用户名和密码来永久存储,而不是SSH密钥密码。
在Windows中,只需运行
$ git config --global credential.helper wincred
这意味着下次按下时,您将照常输入用户名和密码,但它们将保存在Windows凭据中。之后,您无需再次输入它们。
git
将根据配置指令集更改其行为。
我宁愿在打开新终端时不必键入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
这也将记住我的新终端会话密码;引导后打开我的第一个终端时,只需键入一次即可。
我想相信我从哪里得到的。这是对别人工作的修改,但我不记得它是从哪里来的。感谢匿名作者!
更新2019-07-01:我认为所有这些都没有必要。现在,通过确保我的.bash_profile
文件运行ssh-agent,我可以始终如一地工作:
eval $(ssh-agent)
然后,我ssh
像这样设置一个配置文件:
touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo 'AddKeysToAgent yes' >> ~/.ssh/config
如果我对问题的理解正确,那么您已经在构建服务中使用了授权的SSH密钥,但是您希望避免为每个克隆键入密码短语吗?
我可以想到两种方法:
如果您正在以交互方式启动构建服务:在启动构建服务之前,请ssh-agent
以足够长的超时(-t
可选)开始。然后,ssh-add
在启动构建服务之前,使用(msysGit应该具有这些功能)添加所需的所有私钥。您仍然必须输入所有密码,但每次服务启动只需输入一次。
如果您想完全不必输入密码,则可以始终从SSH密钥中删除密码,如/server/50775/how-do-i-change-my-私钥密码,通过设置一个空的新密码。这应该完全消除了密码提示,但它的安全性甚至比以前的选项低。
当我尝试推送代码时,出现以下错误:
$ git push origin dev
remote: Too many invalid password attempts. Try logging in through the website with your password.
fatal: unable to access 'https://naushadqamar-1@bitbucket.org/xxxx/xxxx-api.git/': The requested URL returned error: 403
经过几个小时的研究,我发现我需要使用以下命令:
$ git config --global credential.helper cache
执行完上述命令后,我得到提示输入我的GitHub用户名和密码。提供正确的凭据后,我可以推送我的代码。
正确的解决方案是:
运行Windows默认终端-cmd并获取主配置文件的目录
echo %USERPROFILE%
在上面的目录中运行Git Bash并.bashrc
使用以下命令创建文件
echo "" > .bashrc
.bashrc
使用您喜欢的文本编辑器打开文件,然后将GitHub Help中的代码粘贴到该文件中:
env=~/.ssh/agent.env
...
COPY WHOLE CODE FROM URL - I can't add it to Stack Overflow because it breaks layout... OMG!
重新启动Git Bash,它要求您输入密码(仅第一次)并完成。没有密码再次困扰。
您需要在要连接到存储库服务器的用户文件夹authorized_keys
下创建文件.ssh
。例如,假设你使用的用户名buildservice
就repo.server
可以运行:
cd ~buidservice
mkdir ./ssh
cat id_rsa.pub >> .ssh/authorized_keys
然后,您必须检查以下内容:
相应的id_rsa
私钥在中显示builservice@build.server:~/.shh/id_rsa
。
repo.server的指纹存储在buildservice@build.server:~/.ssh/known_hosts
文件中。通常,将在首次尝试ssh
连接到repo.server
。
cat id_rsa.pub > .ssh/authorized_keys
将覆盖任何现有的授权密钥。使用>>
添加的,而不是覆盖。