gitbashでgitのssh接続がうまくいかないので解決してみた
はじめに
社内で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