无法创建目录“/home/username/.ssh”

21

Git突然停止工作了。 (我在Windows 7下使用Git Bash。我没有使用Cygwin。)

每次尝试拉取或推送时,都会出现以下提示:

Could not create directory '/home/sigod/.ssh'

我的SSH密钥位于C:\ Users \ sigod \ .ssh中,而HOME设置为/c/Users/sigod。这应该可以按照various SO questions的说明正常工作。

如果我将SSH密钥放入C:\ Program Files \ Git \ home \ sigod \ .ssh,那么Git就会再次开始工作。但是如何使其在不使用“脏”解决方案的情况下正常工作?


你使用Cygwin吗? - mauro
@mauro,不,我没有。 - sigod
作为临时解决方案,我创建了符号链接 c:\Program Files\Git\home\ <<===>> c:\Users - sigod
mkdir /home/sigod/.ssh 可能会有帮助。 - KCD
我也有同样的问题。有人已经有解决方案了吗? - azt
Git应该使用您的主目录,该目录应由操作系统配置。可能/home/sigod不存在(或不是目录),但您的环境中某些内容告诉git那是您的主目录。即使在Linux下,用户sigod的主目录也不一定是/home/sigod;用户的主目录是由/etc/passwd中的条目设置的,该条目用于设置$HOME环境变量,这是git查看的内容。它在Windows下可能工作方式有所不同。也许一个Windows专家可以帮忙解决。 - Keith Thompson
6个回答

11

Git Bash是使用MSYS2构建的,它与CygWin非常相似。以下步骤可能适用于您的情况:

  1. 以管理员身份打开cmd.exe,并将HOME系统环境变量设置为指向您的用户目录。

setx -m HOME ^%UserProfile^%

上述命令将会为您的系统环境设置HOME=%UserProfile%

  1. 打开 Git Bash,并确保 /etc/nsswitch.conf 文件包含一个取消注释的db_home行条目。请确保它与以下配置之一匹配:

    选项 a:

    db_home: env windows cygwin desc
    

    选项 b:

    db_home: windows
    
  2. 在尝试第二步的选项时,请完全关闭git-bash(以确保没有后台进程使git-bash保持活动状态,从Windows注销并重新登录)。

我基于一个解释相同问题的CygWin版本的答案


感谢您的更正。我已修改了我的答案。顺便提一下,这是一个GitHub页面链接:https://github.com/git-for-windows/git/wiki/FAQ - yosefrow

1

GitBash类似于Cygwin,使用传统的Linux权限。

我建议您通过在GitBash中运行以下命令来确保您的ssh目录存在于正确的位置并具有正确的权限:

mkdir ~/.ssh
chown $USER:$USER -R ~/.ssh

然后运行stat ~/.ssh,以查看权限是否已正确更改。

ls ~/.ssh

要确保你的密钥已正确安装在正确的位置,请查看。

您可以通过运行echo ~echo $HOME来查看实际注册为您主目录的目录。

您可以通过修改~/.bashrc并添加一行export HOME=/some/directory来更改您的Linux HOME。

您可以通过键入命令mount来查看GitBash文件系统与Windows文件系统的对应关系。

MINGW64 /c $ mount
C:/Program Files/Git on / type ntfs (binary,noacl,auto)
C:/Program Files/Git/usr/bin on /bin type ntfs (binary,noacl,auto)
C:/Users/MyUser/AppData/Local/Temp on /tmp type ntfs (binary,noacl,posix=0,usertemp)
C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)
D: on /d type ntfs (binary,noacl,posix=0,user,noumount,auto)

如果其他方法都不起作用,您也可以尝试修改Windows中的%HOME%环境变量,以确保它指向正确的路径。但是,您添加到~/.bashrc的Linux变量将覆盖任何Windows环境变量。

感谢您详细的回复。不幸的是,我无法测试它,因为问题随符号链接一起消失了。 - sigod
在我的情况下,所有者是正确的,但存在权限问题。一个“chmod -R 777 .ssh”的全局解决了这个问题(以及后来写入known_hosts文件的问题)——但当然强烈建议任何人在执行此操作时备份现有的“.ssh”文件夹。 - Steve Chambers
1
@SteveChambers 你好,感谢你提醒我这个问题。我强烈建议不要使用chmod -R 777 .ssh,因为这会使任何访客或来宾都能看到你的私人ssh密钥。相反,我会简单地在我的命令中添加-R以使其递归。我已经更新了我的答案以反映这一点。关于您的.ssh文件夹中的权限,我建议运行chown $USER:$USER -R ~/.ssh以使自己成为所有者,并使用以下方式修复权限: chmod 644 -R ~/.ssh chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa - yosefrow

1

确保你正在执行哪个 [ssh.exe]!$ where ssh

D:\xxxx\bin\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe
C:\Windows\System32\OpenSSH\ssh.exe

在我的情况下,导出路径中有另一个ssh.exe。(即:D:\xxxx\bin\ssh.exe)
所以我删除了ssh.exe并保留了原始的!(C:\Program Files\Git\usr\bin\ssh.exe)
现在一切都很好!

1

Windows机器

您可以使用cd ~/.ssh/代替~/.ssh

cd ~/.ssh/

2
那会有什么不同吗?这与所提出的问题有什么关系? - Chris
请在您的答案中添加一些解释,以便其他人可以从中学习。 - Nico Haase
不需要创建 .ssh 文件夹,因为在 Windows 或其他操作系统上,默认已经存在。在 Windows 中输入 ~/.ssh 会出错。如果你改变目录到 cd ~/.ssh/,它将导航到您机器上的 .ssh 文件夹。 - Najathi
这很奇怪,我运行了'ls -al'命令,但没有显示.ssh文件夹,但是如果我运行cd ~/.ssh/命令,然后进入.ssh文件夹。 - Berkay Nayman

0

在Git Bash for Windows,版本为2.17.1.2-64位,使用Windows 10时,出现了同样的问题:无法创建目录'/home/carlos.leao/.ssh'。

通过sigod的解决方法解决。但是,我没有创建文件夹结构C:\Program Files\Git\home\carlos.leao并将文件夹C:\Users\carlos.leao.ssh复制到其中,而是创建了一个符号链接从C:\Users\carlos.leao.ssh到C:\Program Files\Git\home\carlos.leao.ssh。要这样做(用您的Windows用户名替换carlos.leao):

  1. 创建此文件夹结构C:\Program Files\Git**home\carlos.leao**
  2. 启动CMD.exe
  3. 运行命令:mklink /d "C:\Users\carlos.leao.ssh" "C:\Program Files\Git\home\carlos.leao.ssh"

完美解决!


0

重新安装git-bash对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接