Nes*_*zer 129 windows git ssh cmd
我刚刚开始使用git而且我无法记住我的密码我正在使用cmd.exe提升而我的git主机是github而且我已经在github上创建了一个类似于该指南的ssh密钥
但我还是得到了
*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':
Run Code Online (Sandbox Code Playgroud)
Rob*_*rtB 199
我意识到这个问题将在两年前出现,但我遇到了同样的问题,这里的几个答案并没有完全回答我的问题.这里有两个循序渐进的解决方案,具体取决于您是否使用TortysiseGit以及msysgit.
第一个解决方案假设Windows,msysgit和PuTTY.
访问Windows环境变量对话框(右键单击"计算机",单击"属性",单击"高级系统设置"或"高级"选项卡,单击"环境变量").添加以下环境变量:
GIT_SSH = C:\全\路径\到\ 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存储库托管在其他位置,请使用适当的用户名和URL 替换git@github.com.(假设Github)您应该被告知服务器的主机密钥没有被缓存,并询问您是否信任它.用y回答.这会将服务器的主机密钥添加到PuTTY的已知主机列表中.没有这个步骤,git命令将无法正常工作.点击进入后,Github通知你Github不提供shell访问权限.那很好......我们不需要它.(如果您要连接到其他主机,并且它为您提供shell访问权限,则最好在不执行任何其他操作的情况下终止链接.)
第二个解决方案假设Windows,msysgit和TortoiseGit.
TortoiseGit附带了PuTTY可执行文件,以及一个特别修改的plink版本(称为TortoisePlink.exe),它将使事情变得更容易.
访问Windows环境变量对话框(右键单击"计算机",单击"属性",单击"高级系统设置"或"高级"选项卡,单击"环境变量").添加以下环境变量:
GIT_SSH = C:\全\路径\为\ 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文件,具体取决于您需要它的频率.
第三个解决方案假设Window,msysgit和本机命令提示符.
start-ssh-agent
d3r*_*3kk 93
每次我设置一个新桌面时,我都会忘记这些说明,所以我在这里添加另一个答案,因为我同样经常偶然发现它!
OpenSSH Authentication Agent
服务并使其自动启动。
Version 10.0.19042.867
我不得不重新执行这一步!ssh-add
命令行将您的 SSH 密钥添加到代理。$ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exe
到您的会话,或永久添加到您的用户环境。Windows 已经随 OpenSSH 一起发布了一段时间。它包括 ssh 与 Git 一起工作的所有必要部分,但它似乎仍然需要一些 TLC 才能 100% 无缝地工作。以下是我在 Windows 版本 10.0.18362.449 中成功遵循的步骤(您可以通过打开 cmd.exe shell 并键入 来查看您的 Windows 10 版本ver
)。
我在这里假设您已经设置了 SSH 密钥,并且位于 ~/.ssh/id_rsa
OpenSSH Authentication Agent
在列表中找到服务。OpenSSH Authentication Agent
服务,然后选择“属性”。Startup type:
为Automatic
。Start
按钮将服务状态更改为Running
。OK
,然后关闭服务应用程序。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':
Run Code Online (Sandbox Code Playgroud)
GIT_SSH
环境变量在任何会话中,您只需设置此环境变量,密码短语的提示将停止出现,ssh 将ssh-agent
代表您使用。或者,您可以将密码永久设置到您的用户环境中。
GIT_SSH
仅在当前 shell 中设置:
ssh.exe
:$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
GIT_SSH
永久设置
Variable name:
字段设置为 GIT_SSHVariable value:
字段设置为 path-to-ssh.exe(通常为C:\Windows\System32\OpenSSH\ssh.exe
)。请注意,随着 Windows 10 的发展和我了解更多信息,这可能会随着新的步骤/程序而改变。我会尽量保持更新,我期待评论中的反馈。
Guy*_*ham 13
如果您在Windows下使用Git bash,您可以执行以下操作:
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
Run Code Online (Sandbox Code Playgroud)
它会在第二个命令中要求传递短语,就是这样.您需要执行的每个额外操作(曾经需要密码短语)都不会要求您输入密码短语(请参阅下面屏幕截图中的示例):
希望能帮助到你.
干杯,
盖伊.
Ale*_*fie 12
问题发布后5年,8个月和6天的一个额外解决方案不是一个坏主意,所以这里.
注意:假设您使用的是Windows计算机.
PATH
环境变量中有GIT ,它应该可以正常工作.如果不这样做,请运行git-credential-winstore -i C:\Path\To\Git.exe
.下次尝试提交存储库时,系统会提示您输入凭据.那应该是它.在您更改密码之前,系统不会再要求您提供凭据.
仅供您参考...您的凭据存储在Windows凭据存储中
你在哪里存储我的凭证?
此应用程序仅使用现有的Windows凭据存储来保存您的凭据.您可以通过转到"控制面板">"用户帐户">"凭据管理器"并选择"Windows凭据"来查看存储的凭据.以"git:"开头的条目来自git-credential-winstore.
如果为密钥文件设置密码,则在连接时始终需要输入该密码.如果您创建无密码密钥,则不必每次都键入密钥,但是,任何有权访问密钥文件的人现在都可以连接到您的github帐户.
ssh-agent也可以工作.尝试运行它,看看它是否会记住你的密码.
[编辑 - 误读了这个问题,这是对相关问题的回答.留下后代的改写版]
我的情况是我试图推送到我们的一台服务器上托管的仓库.每当我尝试推送时,git会问我输入密码(nb - 密码,而不是密码到我的私钥).
通过将我的公钥添加到服务器上的授权密钥,我可以获得无密码推送到该服务器.并且,因为我的私钥上没有密码短语(这是不好的做法顺便说一下!)我根本不需要输入任何内容.
这是将公钥添加到服务器的命令.它假定用户git
是服务器上的用户.
cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'
Run Code Online (Sandbox Code Playgroud)
您可以通过登录服务器并手动将公钥附加到文件来实现相同的目的 ~/.ssh/authorized_keys
假设您想使用纯Git Bash解决方案而不使用 TortoiseGit 或 PuTTY。此外,您不希望永久存储您的密码,因为这与您首先生成没有密码的 SSH 密钥几乎相同。但是你仍然想使用一些缓存。
出于缓存目的ssh-agent
,使用了进程,它包含在 Git Bash 发行版中。默认情况下不会启动此进程,因此需要先启动它。对于要缓存的任何 SSH 密钥,应使用ssh-add
命令将它们添加到此进程中,该命令将提示您输入密钥的密码并将其存储在内存中。
其他解决方案的缺点:
ssh-agent
像GitHub文章中的自动启动一样,在您启动 Git Bash 时从一开始就要求输入密码,无论您是否需要在此会话中使用您的 SSH 密钥。如果您今天正在使用本地存储库,您可能只想在真正需要时(例如,与远程存储库交互时)才提供密码。ssh-agent
在GitLab 的文章中启动你的喜欢,eval $(ssh-agent -s)
你可能已经厌倦了每次输入。最终,您可能已将这两行添加到您的.bashrc
配置中以自动启动。缺点与上述相同,外加一个额外的:每次启动一个新的 Git Bash 终端时,您都会获得一个额外的 ssh-agent 进程(GitHub 的 bash 脚本检查该进程是否已经启动)。因此,此解决方案适用于那些想知道如何让 Git Bash 在每个 Windows 会话中仅在真正需要时要求密码短语的人。它类似于密码短语管理使用GnuPG提交行为自动签名使用default-cache-ttl
。
首先,我们要ssh-agent
在启动 Git Bash shell 时自动启动。我们将使用修改后的 GitHub脚本,因为它会检查进程是否已经开始,但我们不希望它立即ssh-add
生效。此脚本转到您的~/.bashrc
or~/.profile
或~/.bash_profile
(~
是您的用户的主目录,例如C:\Users\Username
- 运行cd ~
,然后pwd
让 Git Bash 将其打印出来):
### 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
Run Code Online (Sandbox Code Playgroud)现在编辑或创建一个~/.ssh/config
文件,并AddKeysToAgent
为要打开缓存的每个主机节添加一个选项(您也可以通过将指令放在文件开头的所有主机声明之前来全局打开它):
# 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
Run Code Online (Sandbox Code Playgroud)
从 ssh 配置手册页:如果此选项设置为 yes 并且从文件加载密钥,则密钥及其密码短语将添加到具有默认生命周期的代理中,就像通过 ssh-add(1) 一样。
默认的最长生命周期是永远或直到ssh-agent
进程被终止(从任务管理器手动或在您的 PC 关闭时)。如果您希望使用有限超时,您可以使用 ssh-agent 的-t
参数进行设置。更改上面第一步中 bash 脚本中的行,例如 30 分钟的密钥缓存生存期:
(umask 077; ssh-agent -t 30m >| "$env")
Run Code Online (Sandbox Code Playgroud)
有关其他时间格式限定符,请参见此处。
.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
Run Code Online (Sandbox Code Playgroud)
每次 bash 运行后都会执行该脚本。因此,您只需在git-bash
启动时输入一次密码即可!
某些版本的 bash 需要.bash_profile
文件.bashrc
,所以以防万一克隆.bashrc
:
copy .bashrc .bash_profile
Run Code Online (Sandbox Code Playgroud)