SSH Private Key Permissions using Git GUI or ssh-keygen are too open
最近我一直无法克隆或推送到github,我正试图找到根本原因。
这是在Windows上
我有cygwin + git以及msysgit。
使用以下选项安装Msysgit:
- OpenSSH的
- 从Windows命令提示符使用Git
这给了我4个环境来尝试使用git:
- Windows cmd提示符
- 电源外壳
- Git Bash
- Cygwin的
不知何故,我设法让自己进入一个位置,当我尝试使用msysgit,cmd.exe或Powershell克隆存储库时,我收到以下错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | > Initialized empty Git repository in > C:/sandbox/SomeProject/.git/ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > Permissions 0644 for > '/c/Users/Ben/.ssh/id_rsa' are too > open. It is recommended that your > private key files are NOT accessible > by others. This private key will be > ignored. bad permissions: ignore key: > /c/Users/Ben/.ssh/id_rsa Permission > denied (publickey). fatal: The remote > end hung up unexpectedly |
这是在我的c: users ben 文件夹中使用.ssh文件夹,这是msysgit使用的文件夹。我怀疑cygwin是可行的,因为.ssh文件夹位于其他地方,但我不知道为什么
在Git Bash中,我检查权限:
1 | $ ls -l -a ~/.ssh |
这给了我:
1 2 3 4 5 | drwxr-xr-x 2 Ben Administ 0 Oct 12 13:09 . drwxr-xr-x 34 Ben Administ 8192 Oct 12 13:15 .. -rw-r--r-- 1 Ben Administ 1743 Oct 12 12:36 id_rsa -rw-r--r-- 1 Ben Administ 399 Oct 12 12:36 id_rsa.pub -rw-r--r-- 1 Ben Administ 407 Oct 12 13:09 known_hosts |
这些权限显然太宽松了。他们是如何得到这种方式的,我不知道。
我可以尝试改变它们......
1 | $ chmod -v -R 600 ~/.ssh |
告诉我:
1 2 3 4 | mode of `.ssh' changed to 0600 (rw-------) mode of `.ssh/id_rsa' changed to 0600 (rw-------) mode of `.ssh/id_rsa.pub' changed to 0600 (rw-------) mode of `.ssh/known_hosts' changed to 0600 (rw-------) |
但似乎没有效果。我仍然得到同样的错误,并做
1 | $ ls -l -a ~/.ssh |
产生与以前相同的权限。
更新:
我试图在cygwin中修复这些文件的权限,cygwin正确报告他们的权限,gitbash没有:
alt text http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg
关于如何真正修复这些权限的任何想法?
你改变了整个目录的权限,我同意Splash是一个坏主意。如果你能记住目录的原始权限是什么,我会尝试将它们设置回原来的权限,然后执行以下操作
1 2 | cd ~/.ssh chmod 700 id_rsa |
在.ssh文件夹中。这将仅为所有者(您)将id_rsa文件设置为rwx(读取,写入,执行),并为其他所有人设置为零访问。
如果您不记得原始设置是什么,请添加新用户并为该用户创建一组SSH密钥,从而创建一个具有默认权限的新.ssh文件夹。您可以使用新的.ssh文件夹作为重置.ssh文件夹和文件的权限的参考。
如果这不起作用,我会尝试卸载msysgit,删除计算机上的所有.ssh文件夹(仅用于安全措施),然后用您想要的设置重新安装msysgit并尝试重新开始(尽管我认为你告诉我你已经尝试过这个了。
编辑:也刚刚通过谷歌找到这个链接 - 修复"警告:不受保护的私人密钥文件!"在Linux上虽然它的目标是Linux,但它可能会有所帮助,因为我们正在谈论liunx权限等。
cygwin的chmod有一个bug,请参考:
https://superuser.com/questions/397288/using-cygwin-in-windows-8-chmod-600-does-not-work-as-expected
1 2 | chgrp -Rv Users ~/.ssh/* chmod -vR 600 ~/.ssh/id_rsa |
对于* nix系统,显而易见的修复是
转到我的电脑/右键单击/属性/高级系统设置/环境变量并删除变量(可能来自系统和用户环境):
CYGWIN
基本上,它是git windows binary使用的mingw32中的一个缺陷,看到所有文件644和所有文件夹755总是如此。删除环境变量不会改变该行为,但它似乎告诉ssh.exe忽略该问题。如果您通过资源管理器安全设置确实为您的id_rsa设置了适当的权限(那里除了您自己之外没有任何其他用户,不是"所有人",不是"管理员",而不是"系统"。没有。只是你) ,你仍然是安全的。
现在,为什么mingw32,一个与cygwin不同的系统,可以使用CYGWIN环境变量,这超出了我的意义。对我来说看起来像个错误。
我正在使用XP,这允许Git Bash与Github沟通(经过很多挫折):
创建包含以下内容的文件
1 2 3 4 5 | Host github.com User git Hostname github.com PreferredAuthentications publickey IdentityFile"/cygdrive/c/Documents and Settings/<username>/.ssh/id_rsa" |
(可选)使用
背景:一般问题是这两者的结合:
- BUG:mingw32将所有文件视为644(其他/组可读),我在mingw32,cygwin或Windows中尝试的任何内容都无法修复它。
- mingw32的SSH版本不允许使用私钥(通常是服务器中的一个好策略)。
对于使用此处找到的Git的Windows 7(它使用MinGW,而不是Cygwin):
从属性更改文件权限,禁用继承和运行chmod 400对我来说不起作用。我的私钥文件的权限是:
-r--r----- 1 alex None 1766 Mar 8 13:04 /home/alex/.ssh/id_rsa
然后我注意到这个组是None,所以我就跑了
chown alex:Administrators ~/.ssh/id_rsa
然后我可以使用chmod 400成功更改权限,并运行git push。
对于MAC用户:
通过在终端中键入以下内容来更改密钥对文件的设置:
1 | chmod og-r *filename.pem* |
(确保您在正确的目录中,或命令中的路径文件名正确)。
好的,这就是我在Win7上实际强制更改我的Windows文件的权限:
在Windows资源管理器中找到您的ssh密钥:
C:用户[your_user_name_here]的.ssh id_rsa
右键单击文件>属性>安全选项卡>高级按钮>更改权限
现在删除实际上不是您用户名的所有人。这包括管理员和系统用户。此时,您可能会获得有关继承权限的对话 - 选择不继承的选项 - 因为我们只想更改此文件。
单击确定并保存直到完成。
我争吵了几天,因为我的Windows不会从命令行更改文件权限。这样它也可以完成 - 而不是使用激动人心的工作,这可能会产生奇怪的后果。
我解决它运行:
1 | chmod 400 ~/.ssh/id_rsa |
我希望能帮到你。祝好运。
最近我在Windows XP上遇到了同样的问题。我尝试在我的?/ .ssh / id_rsa文件中使用chmod 700,但它似乎没有用。当我在?/ .ssh / id_rsa上使用ls -l查看权限时,我可以看到我的有效权限仍为644。
然后我记得Windows权限也从文件夹继承权限,文件夹仍然对所有人开放。解决方案也可以是为文件夹设置权限,但我认为更好的方法是告诉系统忽略该文件的继承。这可以使用文件属性中安全选项卡上的高级选项来完成,并取消选中"从父权限继承......"
这对于具有相同问题的其他人可能会有所帮助。
在最近遇到这个问题之后,这是google的最佳结果之一,我认为我会在这里讨论一下简单的工作:http://code.google.com/p/msysgit/issues/detail?id = 261#C40
只需用你的cygwin ssh.exe覆盖mysys ssh.exe
我正在玩Git 1.6.5,我无法复制你的设置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | Administrator@WS2008 /k/git $ ll ~/.ssh total 8 drwxr-xr-x 2 Administ Administ 4096 Oct 13 22:04 ./ drwxr-xr-x 6 Administ Administ 4096 Oct 6 21:36 ../ -rw-r--r-- 1 Administ Administ 0 Oct 13 22:04 c.txt -rw-r--r-- 1 Administ Administ 403 Sep 30 22:36 config_disabled -rw-r--r-- 1 Administ Administ 887 Aug 30 16:33 id_rsa -rw-r--r-- 1 Administ Administ 226 Aug 30 16:34 id_rsa.pub -rw-r--r-- 1 Administ Administ 843 Aug 30 16:32 id_rsa_putty.ppk -rw-r--r-- 1 Administ Administ 294 Aug 30 16:33 id_rsa_putty.pub -rw-r--r-- 1 Administ Administ 1626 Sep 30 22:49 known_hosts Administrator@WS2008 /k/git $ git clone [email protected]:alexandrul/gitbook.git Initialized empty Git repository in k:/git/gitbook/.git/ remote: Counting objects: 1152, done. remote: Compressing objects: 100% (625/625), done. remote: Total 1152 (delta 438), reused 1056 (delta 383)s Receiving objects: 100% (1152/1152), 1.31 MiB | 78 KiB/s, done. Resolving deltas: 100% (438/438), done. Administrator@WS2008 /k/git $ ssh [email protected] ERROR: Hi alexandrul! You've successfully authenticated, but GitHub does not pro vide shell access Connection to github.com closed. $ ssh -v OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007 |
chmod也不会修改我的密钥的文件权限。
环境:
- NTFS上的Windows Server 2008 SP2
- 用户:管理员
-
环境变量:
- PLINK_PROTOCOL = SSH
- HOME = / C /型材/家
更新:Git 1.6.5.1也可以。
这是Windows上一个特别涉及的问题,仅仅正确地chmod文件是不够的。你必须设置你的环境。
在Windows上,这对我有用:
安装cygwin。
用cygwin的ssh.exe替换msysgit ssh.exe。
使用cygwin bash,chmod 600私钥文件,对我来说是"id_rsa"。
如果仍然不起作用,请转到"控制面板" - >"系统属性" - >"高级" - >"环境变量",然后添加以下环境变量。然后重复步骤3.
变量值
CYGWIN sbmntsec
对我来说,诀窍是用"tty nodosfilewarning"更新CYGWIN环境变量。甚至不需要chmod键。
我能够通过做两件事来解决这个问题,尽管你可能不需要做第1步。
从cygwin ssh.exe和所有cyg * .dll复制到Git的bin目录中(这可能没有必要,但这是我采取的一步,但仅此一项并未解决问题)
按照以下步骤操作:http://zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/
我在?/ .ssh / config文件中添加了一些细节:
主持heroku.com
主机名heroku.com
港口22
身份只是的
IdentityFile~ / .ssh / id_heroku
TCPKeepAlive是的
用户brandon
我不得不使用User作为heroku.com的电子邮件地址
注意:这意味着您需要创建一个密钥,我按此创建密钥,当它提示输入密钥的名称时,请务必指定id_heroku
http://help.github.com/win-set-up-git/
heroku键:添加?/ .ssh / id_heroku.pub
不是主要问题的直接答案,而是关于cygwin的文件夹如何工作的问题......作为一般规则,cygwin将所有"你的"文件置于c: cygwin home username的等价物下。它会将该文件夹视为任何特定于用户的设置,而不是Windows用户目录。
@koby的回答对我不起作用,所以我做了一点改动。
1 2 | cd ~/.ssh chmod 700 id_rsa.pub |
这对我在Mac上运行良好。
将我的Cygwin安装升级到2015年2月左右的版本(
我在运行以下命令后解决了这个问题:
1 | setfacl -s u::rw-,g::---,o:--- ~/.ssh/id_rsa |
(另一个问题的另一个答案给出更多背景)
我的系统有点混乱bash / cygwin / git / msysgit /也许更多......
然后我决定从Windows开始,它起作用了。
点击
现在再试一次......
似乎有时mock-bash无法控制文件所有权。它特别奇怪,因为它是从mock-bash脚本生成的。去搞清楚。
除非有理由想要保留私钥/公钥对(id_rsa / id_rsa.pub),或者喜欢敲打墙,我建议只重新创建它们并在github上更新你的公钥。
首先制作?/ .ssh目录的备份副本。
输入以下内容并回答"是"是否要覆盖现有文件。
1 | ssh-keygen -t rsa |
将公钥的内容复制到剪贴板。 (以下是你应该如何在Mac上完成它)。
1 | cat ~/.ssh/id_rsa.pub | pbcopy |
转到github上的帐户并添加此密钥。
1 2 | Name: My new public key Key: <PASTE> |
退出终端并重新启动。
如果您从未输入公钥时输入无意义的错误消息,例如"输入您的密码",请考虑这种重新启动技术。如上所述,它并不复杂。
我从未设法让git完全在Powershell中工作。但是在git bash shell中我没有任何与权限相关的问题,而且我不需要设置chmod等...在将ssh添加到Github之后我就开始运行了。
输入终端:
1 | chmod -Rf 700 ~/.ssh/ |
然后再试一次。
您是否从其他计算机上复制了密钥文件?
我刚刚在客户端计算机上创建了一个
如果您从另一台计算机上复制它,可能会出现一些隐藏的组问题。
在两台Windows 8.1机器上测试过。使用Sublime Text 3复制并粘贴私钥。使用Git Bash(Git-1.9.4-preview20140611)。
我在Windows 10上遇到了同样的问题,我试图通过SSH连接到Vagrant框。这似乎是旧OpenSSH版本中的一个错误。什么对我有用:
(如果您使用的是Powershell,请注意".exe")
你可能会看到类似的东西:
1 2 3 | C:\Windows\System32\OpenSSH\ssh.exe C:\Program Files\OpenSSH\bin\ssh.exe C:\opscode\chefdk\embedded\git\usr\bin\ssh.exe |
请注意,在上面的示例中,最新的OpenSSH在路径中排在第二位,因此不会执行。
要更改顺序: