sigod
sigod

Reputation: 6432

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

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

Answers (7)

Mohammed Gaber
Mohammed Gaber

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

Najathi
Najathi

Reputation: 3015

Windows Machine

you can use cd ~/.ssh/ instead of ~/.ssh

cd ~/.ssh/

Upvotes: 0

Miron Veryanskiy
Miron Veryanskiy

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:

  1. 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.

  1. 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
    
  2. 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

Jony
Jony

Reputation: 1025

Reinstalling git-bash worked for me.

Upvotes: 0

yozian
yozian

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

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):

  1. Create this folder struture C:\Program Files\Git**home\carlos.leao**
  2. start CMD.exe
  3. run the comand: mklink /d "C:\Users\carlos.leao.ssh" "C:\Program Files\Git\home\carlos.leao.ssh"

Works like a charm!

Upvotes: 0

yosefrow
yosefrow

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

Related Questions