我刚刚开始使用git而且我无法记住我的密码我正在使用cmd.exe提升并且我的git主机是github而且我在github上创建了一个类似于该指南的ssh密钥
但我还是得到了
*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':
答案 0 :(得分:194)
答案 1 :(得分:18)
对于需要更详细说明的人,请参阅此页面: http://help.github.com/working-with-key-passphrases/
答案 2 :(得分:12)
问题发布后5年,8个月和6天的一个额外解决方案不是一个坏主意,所以这里就是这样。
注意:假设您使用的是Windows计算机。
PATH
环境变量中有GIT,它应该可以正常工作。如果您不这样做,请运行git-credential-winstore -i C:\Path\To\Git.exe
。下次尝试提交存储库时,系统会提示您输入凭据。那应该是它。在您更改密码之前,系统不会再要求您提供凭据。
仅供您参考...您的凭据存储在Windows凭据存储
中您在哪里存储我的凭据?
此应用只使用现有的Windows凭据存储来保存您的凭据。您可以转到控制面板>查看存储的凭据。用户帐户>凭据管理器并选择" Windows凭证"。条目开始" git:"来自git-credential-winstore。
答案 3 :(得分:10)
那不是git,而是ssh。
我不做窗户,但是ssh有一个代理概念,可以为你记住密码。 OS X默认启用此功能。你的ssh客户端可能有办法配置它。
答案 4 :(得分:9)
如果您使用 Windows 下的 Git bash ,您可以执行以下操作:
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
它会在第二个命令中询问密码短语,就是这样。您需要执行的每个额外操作(曾经需要密码短语)都不会要求您输入密码短语(请参阅下面的屏幕截图中的示例):
希望它有所帮助。
干杯,
盖。
答案 5 :(得分:7)
如果您为密钥文件设置了密码,则在连接时始终需要输入该密码。如果您创建无密码密钥,则不必每次都输入密钥,但是,任何有权访问密钥文件的人现在都可以连接到您的github帐户。
ssh-agent也可以。尝试运行它,看看它是否会记住你的密码。
答案 6 :(得分:7)
[编辑 - 误读了这个问题,这是对相关问题的回答。留下后代的改写版本]
我的理由是我试图推送到我们其中一台服务器上托管的仓库。每当我尝试推送时,git会问我输入密码(nb - 密码,而不是密码到我的私钥)。
通过将我的公钥添加到服务器上的授权密钥,我能够获得无密码推送到该服务器。并且,因为我的私钥上没有密码短语(这是不好的做法顺便说一下!)我根本不需要输入任何内容。
以下是将公钥添加到服务器的命令。它假定用户git
是服务器上的用户。
cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'
您可以通过登录服务器并手动将公钥附加到~/.ssh/authorized_keys
答案 7 :(得分:4)
我意识到这已经过了好几年了,但我偶然发现了这个问题,试图为它找到一个解决方案,我找到了适合各种专业水平的东西,所以我想我会分享。
GitHub提供了一个非常有用的安装程序,使一切变得简单易用:https://help.github.com/articles/caching-your-github-password-in-git/
答案 8 :(得分:4)
每次设置新桌面时,我都会忘记这些说明,因此我在这里添加了另一个答案,因为我经常会偶然发现它!
OpenSSH Authentication Agent
服务并使其自动启动。ssh-add
将SSH密钥添加到代理。$ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exe
添加到会话中,或永久添加到用户环境中。 Windows已经shipping with OpenSSH for some time now.了,它包含ssh与Git一起工作的所有必需位,但是它似乎仍需要一些TLC才能100%无缝地工作。这是自Windows版本10.0.18362.449起成功执行的步骤(打开cmd.exe shell并输入ver
即可看到Windows 10版本)。
我在这里假设您已经设置了SSH密钥,并且位于~/.ssh/id_rsa
OpenSSH Authentication Agent
服务。OpenSSH Authentication Agent
服务,然后选择“属性”。Startup type:
更改为Automatic
。Start
按钮将服务状态更改为Running
。OK
退出对话框,然后关闭“服务”应用。ssh-agent
ssh-agent
:ssh-add
(如果您的密钥与默认密钥不同,则可以将密钥的路径添加为第一个参数)。。 li>
git clone git@github.com:octocat/Spoon-Knife
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':
GIT_SSH
环境变量在任何会话中,您都可以简单地设置此环境变量,并且密码短语的提示将停止出现,并且ssh将代表您使用ssh-agent
。另外,您可以将密码短语永久设置到用户的环境中。
仅在当前shell中设置GIT_SSH
:
ssh.exe
:$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
要永久设置GIT_SSH
Variable name:
字段设置为GIT_SSH Variable value:
字段设置为path-to-ssh.exe(通常为C:\Windows\System32\OpenSSH\ssh.exe
)。请注意,随着Windows 10的进展以及我所了解的更多,这可能会随着新的步骤/过程而改变。我将尝试保持此更新,希望在评论中提供反馈。
答案 9 :(得分:3)
如果您不介意将密码存储在纯文本中并使用TortoiseGit,则可以使用更多更简单的解决此问题的方法。
只需在您的用户个人资料目录中创建一个_netrc
文件即 - 在Windows 7中,它将是C:\Users\MyName\_netrc
。此文件将以以下格式存储您的登录信息:
machine bitbucket.org login thisismyname password p455w0rD
machine bitbucket.org login another_account password pwdpwdPWd
machine github.com login thisismynameagain password p455w0rD
我正在使用TortoisePLink作为SSH客户端,它可以完美运行。
答案 10 :(得分:1)
可以尝试添加-k arg;
ssh-add -k ~/.ssh/id_rsa
答案 11 :(得分:1)
您可以在用户的主目录中创建一个.bashrc
文件,例如C:/Users/youruser
,并放在那里:
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env
每次bash运行后都会执行此脚本。因此,当git-bash
启动时,您只需输入一次密码!
某些版本的bash需要.bash_profile
文件而不是.bashrc
,所以以防万一克隆.bashrc
:
copy .bashrc .bash_profile
答案 12 :(得分:0)
让我们假设您只想使用纯 Git Bash 解决方案,而不使用TortoiseGit或PuTTY。另外,您也不想永久存储密码短语,因为它几乎与首先生成没有密码短语的SSH密钥一样。但是您仍然想使用一些缓存。
出于缓存目的,使用了ssh-agent
进程,该进程包含在Git Bash发行版中。此过程默认情况下未启动,因此需要首先启动。对于要缓存的任何SSH密钥,应使用ssh-add
命令将其添加到此过程中,该命令将提示您输入密钥的密码并将其存储在内存中。
其他解决方案的缺点:
ssh-agent
在启动Git Bash时从一开始就要求输入密码,无论您是否需要在此会话中使用SSH密钥。如果您今天正在使用本地存储库,则可能只希望在真正需要时(例如,与远程存储库进行交互时)提供密码。ssh-agent
中的GitLab's文章中那样启动eval $(ssh-agent -s)
,您可能会讨厌每次都键入该内容。最终,您有可能将这两行添加到.bashrc
配置中以自动启动。缺点与上述相同,外加一个额外的缺点:每次启动新的Git Bash终端时,您将获得一个额外的ssh-agent进程(GitHub的bash脚本检查该进程是否已经开始)。因此,该解决方案适合那些想知道如何使Git Bash在每个Windows会话中仅在真正需要时要求一次密码的人。它类似于使用auto-signing进行GnuPG提交default-cache-ttl
进行密码短语管理的行为。
首先,我们要在启动Git Bash shell时自动启动ssh-agent
。为此,我们将使用经过修改的GitHub的script,因为它会检查进程是否已经开始,但是我们不希望它立即ssh-add
键。该脚本转到您的~/.bashrc
或~/.profile
或~/.bash_profile
(~
是用户的主目录,如C:\Users\Username
–运行cd ~
,然后运行{{ 1}},以便Git Bash将其打印出来):
pwd
现在编辑或创建一个### Start ssh-agent
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env") # use -t here for timeout
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
fi
unset env
文件,并为要启用缓存的每个主机节添加一个 ~/.ssh/config
选项(也可以将其打开通过将该指令放在文件的开头(在所有主机声明之前)在全局上启用):
AddKeysToAgent
来自ssh config man page::如果此选项设置为yes并且从文件中加载了密钥,则该密钥及其密码将以默认生存期添加到代理中,就像ssh-add(1)一样。
默认的最大生存期是永久的,或者直到# GitHub.com
Host github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_ed25519_github
AddKeysToAgent yes
# GitLab.com
Host gitlab.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_ed25519_gitlab
AddKeysToAgent yes
进程被杀死为止(可以通过任务管理器手动执行,也可以在PC关闭时进行)。如果希望使用有限超时,则可以使用ssh-agent的-t
参数进行设置。从上面的第一步更改bash脚本中的行,例如30分钟的密钥缓存有效期:
ssh-agent
有关其他时间格式限定符,请参见here。
答案 13 :(得分:0)
确保您的~/.ssh/config
不包含
UseKeychain yes
防止 ssh-add
持久化到 ssh-agent
。