Search code examples
gitsshnushell

Git under nushell not using added ssh-key


I am having trouble setting up nushell in windows 11 to not always ask me for the password for my ssh-key when I am using git.

I have confirmed that ssh-agent is running used ssh-add to add my key and

ssh-add -l

shows that the correct key is indeed added. But whenever I issue a git command that would require ssh, I am asked for my password again.

Any ideas why this might be the case?


Solution

  • Short Version

    git config --global core.sshcommand "C:/Windows/System32/OpenSSH/ssh.exe"
    

    More Detail

    I was able to reproduce this. It seems that, by default under Nushell:

    • In my case, ssh-add (and ssh) in Nushell is coming from the Windows OpenSSH implementation. I'm assuming you have the Windows OpenSSH client installed?

      > which ssh ssh-agent ssh-add 
      ╭───────────┬───────────────────────────────────────────┬──────────╮
      │  command  │                   path                    │   type   │
      ├───────────┼───────────────────────────────────────────┼──────────┤
      │ ssh       │ C:\Windows\System32\OpenSSH\ssh.exe       │ external │
      │ ssh-agent │ C:\Windows\System32\OpenSSH\ssh-agent.exe │ external │
      │ ssh-add   │ C:\Windows\System32\OpenSSH\ssh-add.exe   │ external │
      ╰───────────┴───────────────────────────────────────────┴──────────╯
      
    • On the other hand, as far as I can tell, git for Windows seems to default to using the Git-bash provided /usr/bin/ssh. This requires that the environment variables are set properly by /usr/bin/ssh-agent -s (normally eval'd into Bash or other shell). Under Git-Bash:

      $ which ssh ssh-agent ssh-add
      /usr/bin/ssh
      /usr/bin/ssh-agent
      /usr/bin/ssh-add
      

    Since the Git-bash /usr/bin/ssh-agent isn't available under Nushell for Windows, we need to config Git to just use the Windows OpenSSH agent directly. This can be done (reference) via:

    git config --global core.sshcommand "C:/Windows/System32/OpenSSH/ssh.exe"
    

    After I did that, git under Nushell used my ID to access private GitHub repos.