当我克隆存储库时,我已经有点“忍受”Github总是询问我的用户名和密码。我想绕过这一步,因为这是我工作流程中的一个烦恼。
我尝试使用本指南设置SSH密钥(我成功完成了)。 https://help.github.com/articles/generating-ssh-keys我成功了。
我的问题是,在克隆存储库时(使用SSH),我仍然被要求输入我的github密码和密码。我的理解是,在设置了这个SSH密钥后,我不再需要这样做了。
我有点不确定要问什么,所以我只是陈述我的目标。
我希望能够克隆存储库而无需一直输入我的Github信息。
我的SSH密钥丢失了什么?如果有人可以提供一些指导或资源,我会很感激,因为在GitHub中进行SSH身份验证时,我总是觉得有点迷失。
据我所知,这是一个测试事情是否正常工作的命令,这是我控制台的输出:
~ $ ssh -T git@github.com
Saving password to keychain failed
Enter passphrase for key '/Users/MYNAME/.ssh/id_rsa':
Hi MYNAME! You've successfully authenticated, but GitHub does not provide shell access.
当我输入密码时,首先应该失败吗?然后,当我输入我的密码时,它会通过。
答案 0 :(得分:657)
有时您可能不希望密码链中存储密码,但又不想一遍又一遍地输入密码。
你可以这样做:
ssh-add ~/.ssh/id_rsa
这将要求您输入密码,输入密码并在重新启动之前不再询问。
正如@dennis在评论中指出的那样,要通过将密码存储在密钥链中来重新启动密码,您可以在添加此类身份时使用-K
选项(-k
用于Ubuntu) :
ssh-add -K ~/.ssh/id_rsa
再次,这将要求您输入密码,输入密码,这次它永远不会再询问此身份。
答案 1 :(得分:217)
在Mac OSX上,您可以使用以下命令将私钥添加到钥匙串中:
ssh-add -K /path/to/private_key
如果您的私钥存储在〜/ .ssh,并且名为id_rsa:
ssh-add -K ~/.ssh/id_rsa
然后系统会提示您输入密码,密码将存储在您的钥匙串中。
编辑 - 处理重启
为了不必在重新启动后填写您的密码,请将以下内容添加到您的ssh配置文件(通常位于〜/ .ssh / config)
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
答案 2 :(得分:172)
我在这里尝试了所有答案,这些答案都没有效果!我的密码不会在我的Mac的会话/重启之间保持不变。
我在阅读this OpenRadar和this Twitter discussion时发现的是Apple purposely changed the behaviour对于macOS 10.12中的ssh-agent,不再自动加载以前的SSH密钥。为了保持与El Cap相同的行为,我做了以下事情:
ssh-add -K ~/.ssh/id_rsa
ssh-add -A
创建(或编辑,如果存在)以下~/.ssh/config
文件:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
现在我的密码会在重新启动Mac之间被记住!
答案 3 :(得分:140)
如果您使用HTTPs
网址,则会始终询问您的用户名/密码。
如果您在克隆/设置遥控器时正确使用SSH
。然后确保你有一个ssh-agent来记住你的密码。这样,您只需通过终端会话输入一次密码。
如果它仍然太烦人,那么只需设置一个没有密码短语的ssh-key。
答案 4 :(得分:30)
您可以删除密钥
的密码$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
或者你可以运行
$ ssh-keygen -p
您收到密钥文件的提示。默认为~/.ssh/id_rsa
,请按Enter键
系统会提示您输入当前密码短语。
然后会出现新的密码短语,按回车
答案 5 :(得分:27)
只需运行以下命令:
ssh-add -K
永远不会要求您再次输入密码。
答案 6 :(得分:19)
确保您的存储库也使用ssh
mahtab@mahtab-Lenovo-G50-70:~/my-projects/jenkins-cje-2017$ git remote -v
origin git@github.com:eMahtab/jenkins-cje-2017.git (fetch)
origin git@github.com:eMahtab/jenkins-cje-2017.git (push)
不要使用https,如果您的遥控器使用https,那么它将继续询问密码,即使您已将公钥添加到Github并将私钥添加到ssh-agent。以下将始终要求输入密码
mahtab@mahtab-Lenovo-G50-70:~/my-projects/jenkins-cje-2017$ git remote -v
origin https://github.com/eMahtab/jenkins-cje-2017.git (fetch)
origin https://github.com/eMahtab/jenkins-cje-2017.git (push)
答案 7 :(得分:13)
如果您正在使用Windows,这对我有用:
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
它会在第二个命令中询问密码,就是这样。
答案 8 :(得分:10)
尝试ssh-agent
,因为它在那里解释:https://help.github.com/articles/working-with-ssh-key-passphrases
答案 9 :(得分:10)
答案 10 :(得分:8)
本答案适用于Ubuntu
。
请参阅此GitHub文档,将远程的URL从https转换为ssh。
https://help.github.com/articles/changing-a-remote-s-url/
要检查远程URL是ssh还是https,请使用git remote -v
。
从https切换到ssh:
git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
答案 11 :(得分:7)
使用ssh-add命令将您的公钥添加到ssh-agent。
ssh-add
确保ssh公钥,例如〜/ .ssh / id_rsa.pub是您的存储库设置中的内容。
确保您确实可以将ssh插入服务器,例如对于Bitbucket:
ssh -T git@bitbucket.org
将URL更新为从https移至ssh。您可以通过检查以下内容的输出来检查使用哪个:
git remote -v
如果您在网址中看到https://,则您仍在使用https。要进行更新,请执行以下操作:提取网址,然后将https://替换为ssh://,例如。 更改:
https://git@bitbucket.org/../..
收件人:
ssh://git@bitbucket.org/../..
答案 12 :(得分:5)
对于Mac OSX Sierra,我发现在Open Radar的github问题中提出的修复修复了我的问题。好像Sierra改变了默认行为(升级后我开始遇到这个问题)。
我发现这个特别有用: https://github.com/lionheart/openradar-mirror/issues/15361#issuecomment-249059061
ssh-add -A
这导致我的身份被添加到代理, 之后
ssh-add -K {/path/to/key}
总结一下,在OSX.12中:
ssh-add -K {/path/to/key}
ssh-add -A
应该导致:
Identity added: {/path/to/file} ({/path/to/file})
编辑:
我注意到下次我完全重新启动(也就是代理停止并重新启动)时,这不再起作用。更完整的解决方案是@ChrisJF上面提到的:创建~/.ssh/config
文件。这是我的输出:
$ cat ~/.ssh/config
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
您可以根据需要添加任意数量的IdentityFile
条目,但这是默认设置。这也是ATM上面的openradar链路上的“趋势”答案。
答案 13 :(得分:4)
此答案主要适用于Windows用户,如果在其他任何操作系统上无法使用tfs,github或gitlab进行克隆时也同样重要。
使用SSH时的默认身份验证模式是私钥。每当由于某种原因而失败时,ssh-agent都会退回到基于用户名和密码的身份验证。
基于默认密钥的身份验证可能会失败的原因有很多。以下是最常见的情况:
a)ssh-agent 找不到默认的私钥文件id_rsa ,并且没有明确指定其他密钥路径。
b)服务器中存储的公钥不正确。
c)您尝试克隆的路径不正确。
无论如何,要解决此问题,请首先执行git clone命令,并使用以下命令进行详细记录:
GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone ssh://pathToYourRepo
您可以遍历日志中的每个步骤,以直观了解问题的根源。
在(a)情况下的故障排除
确保在.ssh目录中具有默认的密钥名称id_rsa。使用ssh-keygen命令生成密钥时,您可能指定了其他不同的密钥名,或者根本没有任何密钥。
如果要为身份验证指定其他密钥,请使用以下命令:
ssh-agent bash -c 'ssh-add ~/.ssh/anotherKey; git clone ssh://pathToYourRepo'
(b)情况下的故障排除
(c)的故障排除
答案 14 :(得分:3)
我已经设置了密码,但由于某种原因,它不再能识别它。所以我刚刚使用ssh-add -K
将身份文件添加到我的钥匙串中,并且它停止询问我的密码。
答案 15 :(得分:2)
这对我有用:
git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"
答案 16 :(得分:2)
我最近升级到了macOS Mojave,并通过自制软件安装了一些工具,这似乎可以将苹果公司的ssh-add
版本换成其他版本。我的默认BSD版本ssh-add
没有具有-K
选项。这导致以下错误:
# ssh-add: illegal option -- K
通过运行ssh-add
,可以查看所拥有的which ssh-add
版本。
(我的矿藏在/usr/local/bin/ssh-add
中)
要解决此问题,我必须将密钥指向Apple的版本:
/usr/bin/ssh-add -K ~/.ssh/id_rsa
Git / GitHub之后运行良好。有关更多信息,请参见:Error: ssh-add: illegal option -- K
答案 17 :(得分:2)
在 LinuxMint / Ubuntu
中工作执行以下步骤
第1步:
转到文件=> /。ssh / config
将以下几行保存到文件中
Host bitbucket.org
HostName bitbucket.org
User git
IdentityFile /home/apple/myssh-privatekey
AddKeysToAgent yes
不要忘记添加此行 AddKeysToAgent是
第2步:
打开终端,然后将密钥集添加到 ssh-add
$ ssh-add -k /home/apple/myssh-privatekey
提供密码短语。
答案 18 :(得分:2)
您需要使用ssh代理。
简短答案:尝试
ssh-add
在按下之前。在询问时提供您的密码。
在此处查看原始StackExchange答案 https://unix.stackexchange.com/a/12201/268450
答案 19 :(得分:2)
问题似乎是因为您从HTTPS而不是SSH进行克隆。我在这里尝试了所有其他解决方案,但仍然遇到问题。这样做对我来说。
像这样使用osxkeychain helper
:
了解您是否安装了它。
git credential-osxkeychain
如果未安装,系统会提示您将其作为Xcode命令行工具的一部分下载。
如果已安装,请告诉Git使用全局osxkeychain helper
配置使用credential.helper
:
git config --global credential.helper osxkeychain
下次克隆HTTPS网址时,系统会提示您输入用户名/密码,并授予对OSX钥匙串的访问权限。在您第一次执行此操作后,它应保存在您的钥匙串中,您不必再次输入它。
答案 20 :(得分:1)
通常,以下是允许您使用不带密码的ssh远程连接到服务器的步骤:
创建一对rsa私钥和公钥
import {Things, You, Need} from 'react-native'
复制公共密钥并登录到远程服务器
将公共密钥添加到.ssh / authorized_keys
如果您的计算机中有多个ssh密钥,则可以使用ssh-add添加您的密钥
$ ssh-keygen -t rsa -b 4096 -C "your comments"
然后尝试ssh到您的服务器
$ ssh-add /path/to/private/key
来源:http://diary-of-programmer.blogspot.com/2018/08/tips-how-to-ssh-to-your-digitalocean.html
答案 21 :(得分:1)
如果您以前使用过GIT进行密码身份验证,但现在使用SSH身份验证,则需要switch remote URLs from HTTPS to SSH:
git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
答案 22 :(得分:1)
我想为那些可能仍然需要进入的人添加一个答案 密码,因为他们已设置 身份只有是。这可能是由多个密钥和身份文件引起的,它们是git或服务器的密钥。
生成密钥并将其复制到服务器后:
ssh-keygen
ssh-copy-id -i ~/.ssh/12gpu_server.pub lerner@192.168.20.160
我发现它没有用。
然后我去查看~/.ssh/config
文件,我看到了这个
底部:
Host *
IdentitiesOnly yes
然后我在上面添加:
Host 12gpu
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/12gpu_server
我只需输入ssh 12gpu
即可登录。
然后,您可以使用自己喜欢的名称添加多个ssh密钥 只需要将上述四行设置添加到配置中 文件。
主机是您在连接服务器时要输入的名称 后来; HostName 是服务器的IP或域名,如github.com; 用户是您记录的用户名 在服务器中像github或gitlab的用户名或git; IdentityFile 是您存储的文件 你生成的关键。
答案 23 :(得分:0)
如Cloning a Git repo from VSTS over SSH asks a password! Unexpected
中所述问题可能是由于公共密钥身份验证失败,因此它要求输入mycompany帐户的密码。
如果公钥身份验证成功,则不会发生这种情况。
因此您可以检查id_rsa.pub甚至创建一个新的。
答案 24 :(得分:0)
添加到以上答案。 必须在Windows上再做一步,以使git能够使用ssh-agent。
必须在powershell中运行以下命令来更新环境变量:
PS> [Environment] :: SetEnvironmentVariable(“ GIT_SSH”,“ $((Get-Command ssh).Source)”,[System.EnvironmentVariableTarget] :: User)
重新启动VSCode,Powershell或用于激活env变量的任何终端。
完整的说明可以在[here](https://snowdrift.tech/cli/ssh/git/tutorials/2019/01/31/using-ssh-agent-git-windows.html)中找到。
答案 25 :(得分:0)
对我有用的方式(Windows 10)
这样我们保证git客户端指向有效的ssh
答案 26 :(得分:0)
SSH Key - Still asking for password and passphrase
如果在Windows上并使用PuTTY作为SSH密钥生成器,那么这种快速简便的解决方案对我来说是使用纯Windows命令行的唯一可行解决方案:>
pageant.exe
和plink.exe
.ppk
扩展名存储"full\path\to\your\pageant.exe" "full\path\to\your\key.ppk"
(必须用 引起来)。这将执行pageant
服务并注册您的密钥(输入密码后)。GIT_SSH=full\path\to\plink.exe
(不能引用)。这会将与git ssh-communication相关的命令重定向到plink
,该命令将使用pageant
服务进行身份验证,而无需再次询问密码。完成!
注1: This documentation在使用GIT_SHH
环境变量设置时会警告某些特殊性。我可以push
,pull
,fetch
,并在命令中添加任意数量的附加参数,一切对我来说都很好(不需要编写其中建议的任何额外脚本)。
注2:到PuTTY
的安装路径通常在PATH
中,因此可以省略。无论如何,我更喜欢指定完整路径。
自动化:
在从命令行使用git之前,可以运行以下批处理文件。它说明了设置的用法:
git-init.bat
@ECHO OFF
:: Use start since the call is blocking
START "%ProgramFiles%\PuTTY\pageant.exe" "%HOMEDRIVE%%HOMEPATH%\.ssh\id_ed00000.ppk"
SET GIT_SSH=%ProgramFiles%\PuTTY\plink.exe
无论如何,我在GIT_SSH
中设置了SystemPropertiesAdvanced.exe > Environment variables
变量,并添加了pageant.exe
作为Run
注册表项(*)。
(*)添加Run
注册表项的步骤>
regedit.exe
HKEY_CURRENT_USER > Software > Microsoft > Windows > CurrentVersion > Run
Edit > New > String Value
Edit > Modify...
(或双击)pageant.exe
和public key
的引号引起来的路径,例如"C:\Program Files\PuTTY\pageant.exe" "C:\Users\username\.ssh\id_ed00000.ppk"
(注意%ProgramFiles%
等变量在这里不起作用,除非选择{{1 }}代替步骤3中的Expandable string value
。答案 27 :(得分:0)
Mobaxterme有一个UI界面
setting > configuration > SSH > SSH Agent > [check] Use internal SSH agent "moboAgent" > add [your id_rsa and restart mobaxterme to set changes]
答案 28 :(得分:0)
对我来说同样的问题,解决方案是:
请参阅此github文档,将远程的URL从https转换为ssh。要检查远程URL是ssh还是https,请使用git remote -v。要从https切换到ssh:git remote set-url origin git@github.com:USERNAME / REPOSITORY.git @jeeYem
答案 29 :(得分:0)
如果您使用Windows和GIT 没有第三方工具且密码不安全,请使用密码/密码:
将git-server主机添加到“config”文件中,如下所示:
#Example host entry
Host myhostname.com
HostName myhostname.com
User git
IdentityFile c:/users/laptop/.ssh/id_rsa.pub
PasswordAuthentication no
Port 422
保存文件并克隆存储库,如下所示:
git clone ssh://myhostname.com/git-server/repos/picalc.git
您可以为“config”文件主机条目使用其他配置参数。这些可以在您的本地git安装文件夹中找到,例如“ C:\ Program Files \ Git \ etc \ ssh \ ssh_config ”。摘录:
# Host *
# ForwardAgent no
# ForwardX11 no
# RhostsRSAAuthentication no
# RSAAuthentication yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
# Port 22
# Protocol 2
# Cipher 3des
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
答案 30 :(得分:0)
使用Github提供的ssh
远程网址https
。
答案 31 :(得分:0)
如果您正在使用ssh url for git,当提示输入ssh的密码时,请将用户名设置为“ git ”,将密码设置为系统的登录密码
答案 32 :(得分:-1)
我认为@sudo bangbang的答案应该被接受。
生成ssh密钥时,当提示您配置密码时,您只需按“ Enter”以跳过键入密码。
这意味着您在使用ssh密钥时不需要密码,因此请记住在生成ssh密钥时,请勿输入密码,只需按Enter键即可跳过它。