Reputation: 6432
Git suddenly stopped working for me. (I use Git Bash under Windows 7. I am not using Cygwin.)
Every time I try to pull or push it says:
Could not create directory '/home/sigod/.ssh'
My SSH keys located in C:\Users\sigod\.ssh
and HOME
set to /c/Users/sigod
. Which should work according to various SO questions.
If I place SSH keys into C:\Program Files\Git\home\sigod\.ssh
then Git starts working again. But how can I make it work without dirty solutions?
Upvotes: 22
Views: 57253
Reputation: 1
icacls C:\Users\101\.ssh\config /remove "NT AUTHORITY\Authenticated Users"
icacls C:\Users\101\.ssh\config /inheritance:r
icacls C:\Users\101\.ssh\config /remove "NT AUTHORITY\Authenticated Users"
icacls C:\Users\101\.ssh\config /grant:r 101:(R,W)
icacls C:\Users\101\.ssh\config /grant:r SYSTEM:(F)
icacls C:\Users\101\.ssh\config /remove "NT AUTHORITY\Authenticated Users"
icacls C:\Users\101\.ssh\config /grant:r 101:(R,W)
icacls C:\Users\101\.ssh\config /grant:r SYSTEM:(F)
takeown /F C:\Users\101\.ssh\config
Restart-Service sshd
Upvotes: -1
Reputation: 3015
Windows Machine
you can use cd ~/.ssh/ instead of ~/.ssh
cd ~/.ssh/
Upvotes: 0
Reputation: 343
Git Bash is built using MSYS2, which is a very close cousin to CygWin. The following steps might just work for your case:
Open cmd.exe as administrator, and set the HOME system environment variable to point to your user directory.
setx -m HOME ^%UserProfile^%
The above command will set HOME=%UserProfile% for your system environment.
Open git bash, and make sure that /etc/nsswitch.conf file contains an uncommented db_home line entry. Make sure it matches one of the below configurations:
option a:
db_home: env windows cygwin desc
option b:
db_home: windows
Fully close git-bash when trying out options in step 2 (to be sure no background processes are keeping git-bash alive, log off from windows and log back in).
I based the above on an answer explaining the CygWin version of the same question.
Upvotes: 12
Reputation: 11
Make sure which one [ssh.exe] you are executing ! $ where ssh
D:\xxxx\bin\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe
C:\Windows\System32\OpenSSH\ssh.exe
In my case, there is another ssh.exe in my export Path. (i.e.: D:\xxxx\bin\ssh.exe)
So I remove the the ssh.exe and keep the original one! (C:\Program Files\Git\usr\bin\ssh.exe)
Everything is nice now!
Upvotes: 1
Reputation: 1
Same thing here: Could not create directory '/home/carlos.leao/.ssh', in Git Bash for Windows, version 2.17.1.2-64-bit. Using Windows 10.
Solve with sigod workaround. But insted of create the folder struture C:\Program Files\Git\home\carlos.leao and copied the folder C:\Users\carlos.leao.ssh into it i've created a symbolic link from C:\Users\carlos.leao.ssh to C:\Program Files\Git\home\carlos.leao.ssh. To do it (replace carlos.leao with your Windows username):
Works like a charm!
Upvotes: 0
Reputation: 2268
GitBash is similar to Cygwin which uses traditional linux permissions.
I suggest you make sure your ssh directory exists in the correct place and has the right permissions by running from git bash the following commands:
mkdir ~/.ssh
chown $USER:$USER -R ~/.ssh
then run stat ~/.ssh
to see that the permissions changed correctly
ls ~/.ssh
to see that your key is properly installed in the correct place.
You can see which directory is actually registered as your home directory by running echo ~
or echo $HOME
.
You can change your linux HOME by modifying ~/.bashrc
and adding the line export HOME=/some/directory
You can see how your GitBash filesystem corresponds to your windows filesystem by typing the command mount
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)
If nothing else works, you can also try modifying the %HOME%
environment variable in windows to make sure it directs to the right path. But any windows env var will be overwritten by linux vars you add to your ~/.bashrc
Upvotes: 1