🙆

gitbashでgitのssh接続がうまくいかないので解決してみた

2023/08/06に公開

はじめに

社内でgitlabサーバ立てて使っておりまして。
最近設定したPCがgitbashからgitを使うとsshで接続できない。なんでぞ…
各セクションから「SSHでのgitlab接続、繋がらないんですが!」という話は結構あり、その都度色々な手法で解決してきましたが、今回の件はそれらでも通用しない!
というところで色々調査してみました。

現状確認

ひとまずはどういう状況か確認。

  • 既にキーは作ってgitlabへ公開鍵は登録済
    • gitbashにてssh-keygenコマンドで生成
  • PowerShellでは接続テストうまくいく
  • Gitbashではパスワードが求められる

PowerShellでは繋がっていることもあり、パーミッションやキーがおかしいってことはなさそう。

接続チェック

接続テストなので、以下で。オプションに-vをつけることでログも出せるので変なところないかチェック。
ssh -vT 接続先

このチェックをgitbashとPowerShellで実行して気になったのはこの部分

  • gitbash

    OpenSSH_9.2p1, OpenSSL 1.1.1t 7 Feb 2023
    
  • PowerShell

    OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
    

初っ端に使用されるSSHシステムがでるんですが、それらを見ると全然違うもの。
sshコマンドの実行ファイルがどこにあるかを調査。

  • gitbash
    • 調査コマンド:where ssh
      gitインストールディレクトリ内\usr\bin\ssh.exe
      C:\Windows\System32\OpenSSH\ssh.exe ← これもあるけど↑優先状態
      
  • PowerShell
    • 調査コマンド:gcm ssh
      C:\Windows\System32\OpenSSH\ssh.exe
      

考察

使ってるシステムが違うのが悪さしてるのでは?と仮説して、既に繋がっているPowerShell側の方に合わせたらいいのではないかと。
となると、現状PATHで順序が後ろに来ているWindows側のsshをなんとか前に持ってくる必要がある。

解決方法

考察の通り、PATHの順序を変えることで対応します。
まずはgitbashの環境変数にWindowsのOpenSSHを通すため、gitbash上で以下を実行。

# ホームディレクトリに移動
cd ~/
# .bash_profileというファイルを作成(あったらこのコマンド不要)
touch .bash_profile
# .bash_profileというファイルを編集
vi .bash_profile

viでそのファイルを開いて以下のPATH追記。

# .bash_profileにOpenSSHのパス追記
PATH="/c/Windows/System32/OpenSSH:${PATH}"
# 上書き終了(:wq)

再読み込みしたら設定完了

# 設定再読み込み
source ~/.bash_profile
# 確認
where ssh
> C:\Windows\System32\OpenSSH\ssh.exe
> gitインストールディレクトリ\usr\bin\ssh.exe

このようにWindowsのOpenSSHが先に表示されればOK。

最後に

gitbash側のSSHの何が悪かったのかは分かってないのでそこは気になりますが…
ひとまずは通るようにはなったのでこれで使っていきます。
ターミナルをgitbashで使っててsshがうまくいかない人はお試しあれ。

Discussion