rep*_*mer 188 git ssh ssh-keys
我已经通过ssh克隆了我的git存储库.因此,每次我通过推或拉与原始主人沟通时,我都必须重新输入密码.如何配置git以便我不需要多次输入密码?
小智 280
与GitHub有类似的问题,因为我使用的是HTTPS协议.要检查您正在使用的协议,请运行
git config -l
Run Code Online (Sandbox Code Playgroud)
并查看以remote.origin.url
.开头的行.切换协议
git config remote.origin.url git@github.com:your_username/your_project.git
Run Code Online (Sandbox Code Playgroud)
Dig*_*oss 100
ssh-add
,你需要ssh-agent
运行并持有你的私钥(好的,回应更新的问题,你首先运行ssh-keygen
生成一个公钥和私钥,如Jefromi所 解释的.你把公钥放在服务器上.你应该使用密码,如果你没有,你有相同的平原- 私钥中的文字密码.但是当你这样做时,你需要作为一个实际问题ssh-agent
,如下所述.)
您希望ssh-agent
在登录时在后台运行.登录后,想法是只运行ssh-add
一次,以便为代理提供密码,以解码密钥.然后代理只是在你的钥匙解锁和加载的情况下坐在内存中,每次你在某个地方ssh时都可以使用.
然后,所有ssh-family命令1将咨询代理并自动使用您的私钥.
在OSX(错误,macOS)上,GNOME和KDE系统ssh-agent
通常会自动为您启动.我将详细介绍细节,就像我一样,你也有一个Cygwin或其他Windows环境,而这肯定不适合你.
从这里开始:man ssh-agent
.
有多种方法可以自动运行代理.如手册页所述,您可以运行它,使其成为所有登录会话的其他进程的父级.这样,它提供的环境变量将自动存在于所有shell中.当您(稍后)调用ssh-add
或ssh
两者都可以访问代理时,因为它们都具有带魔术套接字路径名的环境变量或其他任何内容.
或者,您可以将代理作为普通子代运行,将环境设置保存在文件中,并在启动时在每个shell中获取该文件.
我的OSX和Ubuntu系统自动执行代理启动设置,因此我所要做的就是运行ssh-add
一次.尝试运行ssh-add
并查看它是否有效,如果是,那么每次重启只需要执行一次.
我的Cygwin系统需要手动完成,所以我在我.profile
和我的.bashrc
源头做了这个.profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
Run Code Online (Sandbox Code Playgroud)
该.agent
文件由脚本自动创建; 它包含环境变量定义和导出.上面尝试获取.agent文件,然后尝试ps(1)
代理.如果它不起作用,它将启动代理并创建新的代理文件.您也可以运行ssh-add
,如果失败则启动代理.
sudo
的正确的pam扩展.
Cas*_*bel 23
这是关于配置ssh,而不是git.如果您还没有,则应使用ssh-keygen
(使用空白密码)来创建密钥对.然后,使用将公钥复制到远程目标ssh-copy-id
.除非您需要多个密钥(例如,一个更安全的密钥用于其他目的)或者您有一些非常奇怪的多重身份信息,所以这很简单:
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
Run Code Online (Sandbox Code Playgroud)
编辑:你应该只是阅读DigitalRoss的答案,但是:如果你使用带密码的密钥,你需要使用它ssh-add <key-file>
来添加它们ssh-agent
(ssh-agent
如果你的发行版还没有为你运行的话,那么显然会启动它).
Nis*_*yal 14
如果您使用HTTPS克隆(推荐),那么: -
git config --global credential.helper cache
Run Code Online (Sandbox Code Playgroud)
然后
git config --global credential.helper 'cache --timeout=2592000'
Run Code Online (Sandbox Code Playgroud)
timeout = 2592000(30天以秒为单位)启用缓存30天(或任何套件).
现在运行一个简单的git命令,需要你的用户名和密码.
输入您的凭据一次,现在启用缓存30天.
使用任何git命令再试一次,现在您不需要任何凭据.
有关更多信息: - 在Git中缓存您的GitHub密码
注意:您需要Git 1.7.10或更高版本才能使用凭据帮助程序.在系统重启时,我们可能需要再次输入密码.
扩展Muein的想法,为那些喜欢直接在git-bash或终端中运行命令编辑文件的人.
转到项目的.git目录(本地计算机上的项目根目录)并打开"config"文件.然后查找[remote"origin"]并设置url配置如下:
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
Run Code Online (Sandbox Code Playgroud)
我认为这里有两件不同的事情.第一个是正常的SSH身份验证要求用户输入帐户的密码(根据sshd配置,帐户密码将根据不同的方法进行身份验证).
您可以避免使用证书来输入密码.使用证书,您仍然需要输入密码,但这次是您的私钥的密码(这与帐户的密码无关).
为此,您可以按照steveth45指出的说明操作:
使用公钥认证.
如果您希望每次都避免使用证书的密码,那么您可以使用ssh-agent,正如DigitalRoss所指出的那样
您执行此操作的确切方式取决于Unix与Windows,但实际上您需要在登录时在后台运行ssh-agent,然后在第一次登录时运行ssh-add以向代理提供密码.然后,所有ssh-family命令将咨询代理并自动获取您的密码.
从这里开始:man ssh-agent.
ssh-agent的唯一问题是,至少在*nix上,你必须在每个新shell上放置证书密码.然后证书被"加载",您可以使用它来对ssh服务器进行身份验证,而无需输入任何密码.但这是在特定的外壳上.
使用钥匙串,您可以执行与ssh-agent相同的操作,但"系统范围内".打开计算机后,打开shell并输入证书的密码.然后,每个其他shell将使用该"加载"证书,并且在重新启动PC之前永远不会再次询问您的密码.
Gnome有一个类似的应用程序,名为Gnome Keyring,在您第一次使用它时会询问您的证书密码,然后将其安全存储,这样您就不会再被要求了.