*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':
每次我设置新的桌面时都会忘记这些说明,所以我在这里添加了另一个答案,因为我经常遇到这个问题!
OpenSSH身份验证代理
服务,并使其自动启动。
版本10.0.19042.867
,我必须重新执行此步骤!ssh-add
将您的SSH密钥添加到代理。$ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exe
,或永久地添加到您的用户环境。Windows已经有一段时间与OpenSSH一起发布。 它包含所有必要的部分以使ssh可以与Git一起工作,但似乎仍需要一些TLC才能完全无缝地工作。以下是我成功遵循的步骤,截至Windows版本10.0.18362.449(您可以通过打开cmd.exe shell并输入ver
来查看Windows 10版本)。
我在这里假设您已经设置好了SSH密钥,并且位于~/.ssh/id_rsa
OpenSSH身份验证代理
服务。OpenSSH身份验证代理
服务,选择“属性”。启动类型:
更改为自动
。启动
按钮以将服务状态更改为正在运行
。确定
关闭对话框,并关闭服务应用程序。ssh-agent
ssh-agent
:ssh-add
(如果与默认值不同,则可以将密钥的路径作为第一个参数添加)。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
:
变量名称:
字段设置为GIT_SSH变量值:
字段设置为ssh.exe的路径(通常为C:\Windows\System32\OpenSSH\ssh.exe
)。请注意,随着Windows 10的进展和我的学习,这可能会改变为新的步骤/流程。我将尝试保持更新,期待在评论中得到反馈。
C:\ Windows \ System32 \ OpenSSH
的目录链接,并将GIT_SSH环境变量设置为C:\ PathToJunction \ ssh.exe
。否则,VS内部git.exe将无法定位ssh.exe,因为32位可执行文件无法直接访问64位系统上的System32。 - SaulSystem32\OpenSSH
的符号链接可以创建在任何目录下。一旦创建完成,将GIT_SSH环境变量指定为符号链接的完整路径加上ssh.exe即可。 - undefined我知道这个问题已经出现了两年,但我遇到了同样的问题,这里的几个答案并没有完全回答我的问题。以下是三个逐步解决方案,取决于您是否除了msysgit还使用TortoiseGit。
第一种解决方案 假设您使用Windows、msysgit和PuTTY。
按照说明安装msysgit和PuTTY。
(可选)将PuTTY添加到您的路径中。(如果您不这样做,则下面对PuTTY命令的任何引用都必须加上适当可执行文件的完整路径前缀。)
如果您还没有这样做,请按照GitHub或Git主机的说明生成密钥哈希。
同样,如果您还没有这样做,请使用puttygen.exe将您的密钥转换为PuTTY的pageant.exe使用。说明在PuTTY的文档中,此有用的指南以及网络上的其他几个位置。
运行PuTTY的pageant.exe,打开您的.ppk文件(“添加密钥”),并提供密钥的密码。
访问Windows的环境变量对话框(右键单击“计算机”,单击“属性”,单击“高级系统设置”或“高级”选项卡,单击“环境变量”)。添加以下环境变量:
GIT_SSH=C:\full\path\to\plink.exe
将“C:\full\path\to”替换为PuTTY的完整安装路径,其中包含plink.exe。最好将其添加到“用户变量”部分。同时,请确保您用于plink.exe的路径与您用于Pageant(pageant.exe)的路径匹配。在某些情况下,您可能会安装多个PuTTY,因为它可能随其他应用程序一起安装。从一个安装中使用plink.exe和从另一个安装中使用pageant.exe可能会给您带来麻烦。
打开命令提示符。
如果您正在尝试连接到托管在Github.com上的git存储库,则运行以下命令:
plink.exe git@github.com
如果您要连接的git存储库托管在其他地方,请将git@github.com替换为适当的用户名和URL。(假设是Github)您将被告知服务器的主机密钥未缓存,并询问是否信任它。回答y。这将把服务器的主机密钥添加到PuTTY已知主机列表中。如果不进行此步骤,则git命令将无法正常工作。按Enter后,GitHub会通知您GitHub不提供shell访问权限。没关系...我们不需要它。(如果您正在连接到其他主机,并且它给您提供了shell访问权限,则最好在不执行其他操作的情况下终止链接。)
全部完成!现在应该可以从命令行运行git命令。您可能需要让pageant.exe 在启动时自动加载您的.ppk文件,这取决于您需要多频繁。
第二种解决方案 假设使用Windows操作系统,需要安装msysgit和TortoiseGit。
TortoiseGit自带PuTTY可执行文件和一个特殊修改版的plink(名为TortoisePlink.exe),这将使事情更加容易。
按照说明安装msysgit和TortoiseGit。
如果您还没有这样做,请按照GitHub或Git主机的说明生成密钥哈希。
同样,如果您还没有这样做,请使用TortoiseGit的puttygen.exe将密钥转换为可用于TortoiseGit的pageant.exe。在PuTTY的文档中、在第一个解决方案中链接的有用指南中以及网络上的其他几个地方都有说明。
运行TortoiseGit的pageant.exe,打开您的.ppk文件(“添加密钥”)并提供密钥的密码。
访问Windows的环境变量对话框(右键单击“计算机”,单击“属性”,单击“高级系统设置”或“高级”选项卡,单击“环境变量”)。添加以下环境变量:
GIT_SSH=C:\full\path\to\TortoisePlink.exe
将“C:\full\path\to”替换为TortoiseGit的完整安装路径,其中包含TortoisePlink.exe。最好将其添加到“用户变量”部分。此外,请确保您用于TortoisePlink.exe的路径与您用于Pageant(pageant.exe)的路径匹配。在某些情况下,您可能会有几个PuTTY的安装版本,因为它可能随其他应用程序一起安装。使用来自TortoiseGit安装的TortoisePlink.exe和来自不同应用程序的另一个安装或独立的PuTTY安装的pageant.exe可能会导致问题。
完成!现在应该可以从命令行运行Git命令了。第一次尝试连接到您的git存储库时,您可能会被告知服务器的主机密钥未缓存,并询问您是否信任该服务器。单击“是”。(这是TortoisePlink.exe在工作。)
您可能希望让pageant.exe在启动时自动加载您的.ppk文件,这取决于您需要多频繁。
第三种解决方案 假设使用Windows操作系统,msysgit和本地命令提示符。
start-ssh-agent
start-ssh-agent
即可保存您的 SSH 密码短语。 - Matt Clarksonnotepad ~/.profile
并从该链接中复制粘贴了内容,重新启动了Git Bash,输入了我的密码,获得了利润... - Daryn~/.profile
或~/.bashrc
时,它并没有起作用。我需要将其添加到~/.bash_profile
中,才能被Git Bash on Windows识别和使用。我现在看到@alexander-goncharov的答案也提到了这一点。 - csrowell在问题发布5年、8个月和6天后,另一种额外的解决方案也不是坏主意,因此这里提供一个。
注意:假设您使用的是Windows电脑。
PATH
环境变量中有GIT,它应该可以直接工作。如果没有,请运行git-credential-winstore -i C:\Path\To\Git.exe
。下次尝试提交到存储库时,您将被提示输入您的凭据。然后就完成了。在您更改密码之前,您将不再被要求输入凭据。
只是为了让您知道……您的凭据存储在Windows凭据管理器中。
您将我的凭据存储在哪里?
此应用程序只是使用现有的Windows凭据管理器来保存您的凭据。您可以通过转到控制面板>用户帐户>Credential Manager并选择“Windows凭据”来查看存储的凭据。以“git:”开头的条目来自git-credential-winstore。
ssh-agent
会在你启动Git Bash时立即要求输入密码,无论本次会话是否需要使用SSH密钥。如果今天你只是在处理本地repo,那么只有在真正需要时(例如与远程repo交互时)才需要提供密码。eval $(ssh-agent -s)
启动ssh-agent
,你可能已经厌倦了每次都要输入这个命令。很有可能,你已经将这两行代码添加到了你的.bashrc
配置文件中以实现自动启动。缺点与上述相同,但还有一个额外的缺点:每次启动新的Git Bash终端时,你都会得到一个额外的ssh-agent进程(GitHub的bash脚本检查该进程是否已经启动)。因此,这个解决方案适用于那些想知道如何使Git Bash仅在Windows会话期间和确实需要时要求输入一次密码短语的人。它类似于使用GnuPG提交自动签名并使用default-cache-ttl
的密码短语管理行为。
First, we want to auto-launch the ssh-agent
when starting a Git Bash shell. We'll use a modified GitHub's script for that as it checks whether the process has already started, but we don't want it to ssh-add
keys right away. This script goes to your ~/.bashrc
or ~/.profile
or ~/.bash_profile
(~
is your User's home directory like C:\Users\Username
– run cd ~
and then pwd
for the Git Bash to print it out):
### 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
Now edit or create a ~/.ssh/config
file and add an AddKeysToAgent
option for each host stanza you want caching to be turned on (you can also turn it on globally by placing the directive at the beginning of the file before all the host declarations):
# 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
From ssh config man page: If this option is set to yes and a key is loaded from a file, the key and its passphrase are added to the agent with the default lifetime, as if by ssh-add(1).
ssh-agent
进程被杀死(可以手动从任务管理器中结束,或者在计算机关闭时)。如果您希望使用有限的超时时间,可以使用ssh-agent的-t
参数进行设置。将上面第一步中的bash脚本中的行更改为,例如,30分钟密钥缓存生命周期:(umask 077; ssh-agent -t 30m >| "$env")
请参见此处了解其他时间格式的限定词。
如果您为密钥文件设置了密码,则每次连接时都需要输入该密码。如果您创建了一个无密码的密钥,那么您将不必每次键入密码,但是任何可以访问您的密钥文件的人现在都可以连接到您的github帐户。
ssh-agent也可能有效。尝试运行它并查看是否会记住您的口令。
ssh-keygen -p
应该允许 OP 不设置密码。 - luchosrockgit
是服务器上的用户。cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'
您可以通过登录服务器并手动将公钥添加到 ~/.ssh/authorized_keys
文件中来实现相同的效果。
C:/Users/youruser
)创建一个.bashrc
文件,并在其中添加以下内容: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
git-bash
时,您只需要输入一次密码!.bash_profile
文件而不是.bashrc
文件,因此为了以防万一,请克隆.bashrc
文件:copy .bashrc .bash_profile
GIT_SSH
(如果需要),git/ssh将通过ssh-agent记住您的密码。请参阅以下详细说明。 - d3r3kk