""
[SSH] ポート指定GitサーバにSSHでアクセスできない時(Windows/GitExtensions)
最近…
機械学習関係をやってたんですけど、Unityをまた触ることになっています
てんやわんやして、前回更新から2カ月も経ってしまった…(+o+)
今回また、タイトル名のGit/SSH関係でオロオロしたので、同現象で困ってる人の助けになれば幸いです
(現象)初回SSH接続に失敗する
環境
- Windows7/64bit
- GitExtensions
- キーペアを用いた認証でのSSH接続
- GitサーバへのSSHアクセスは、オリジナルのポート番号を割り当てている
こんな環境で作業していました(古いPCからアクセスしたかったので、Win7なのです…)
初回クローンするために、Gitサーバにアクセスしようと、秘密鍵を .ssh ディレクトリ以下にコピーしておきます
デフォルトのSSH秘密鍵置き場は
c:\Users[ユーザ名].ssh/id_rsa
ですGitExtensionsを利用してGitリポジトリからクローンしようとすると、以下のエラーが…
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and repository exists.
え、なんで…?
(解決)ポート番号ありでknown_hostsに登録する
アドレスも合ってる!
リポジトリもある!
サーバには公開鍵、クライアントには秘密鍵を置いてる!
これでなぜアクセス出来ないのか、解明に半日かかってしまいました…トホホ
自分のインフラ力の無さに涙が出そうです
答えを書きますと、
- 先にコマンドプロンプトからSSHアクセスを行っておく
- ポート番号の指定がある場合は、ポート番号指定でアクセスしておく
これで解決しました…(^_^;)
わたしの場合のポイントは、ポート指定でした
コマンドプロンプトを立ち上げます
わたしの場合、GitExtensionsを使ってたので Tools > Git bash から立ち上げましたSSH のテスト接続を行います
$ssh git@[サーバアドレス] -p [SSHアクセスのポート番号]
そしたら、
Are you sure you want to continue connecting (yes/no)?
と聞かれるので、すかさず yes を!
c:\Users[ユーザ名].ssh\known_hosts にアクセス情報が登録されます
これで GitExtensions に戻って新規クローン開始したら、拒否されることなくソースを取得できました!
まとめ
最初に、
$ssh git@[サーバアドレス]
この状態で接続テストしてたんですけど、足りてないみたいでした
たったこれだけなんですけど、あまり情報が乗ってなかったように思いますので
未来の自分へのメモ…
[SSH] 複数キー接続のconfig記載について
前回、
[Git] Gitで利用するsshキーペアの作成、ssh接続、複数ID接続
で Gitサーバにアクセスするための ssh 接続について記載しました
その追記メモです
.\.ssh\config ファイルに記載する内容
Git アクセス に ssh を利用する際に、複数アカウントを利用したい
つまり、複数 ssh キーを利用したい
という場合についてです
もし、利用するキーの名前が id_rsa であれば
これはデフォルトで認識される名前なので、わざわざ .\.ssh\config ファイルに記載しなくても接続OKでした
つまり例えば、
- 元々 社内用 Git サーバのアクセスに id_rsa を利用していた
- 追加で、GitHub にアクセスするキー(github_rsa など別名称)を作成した
こんな場合があったとします
.\.ssh\config ファイルに記載する内容は 2. の github_rsa のものだけでOKです
もちろん、 1. の id_rsa を書いても問題ないですし、コンフィグにちゃんと記載されている方が、後々判りやすいと思いますが
無理に config に追記しなくてもわたしの環境では問題なく接続できました
参考までに~(^^)/
[Git] Gitで利用するsshキーペアの作成、ssh接続、複数ID接続
しょっちゅう作っては、作り方を忘れ、また検索で調べる…ということをしているので、sshキーの生成&接続について、忘れないようにメモしておきます
GitサーバへSSHキーを使って接続したい
Gitサーバに接続するには、
- http
- ssh
この2種類の接続方法があるみたいです
Git接続用のクライアントアプリは、どっちで接続するか選択できるものもあるので
Sourcetreeなどを使っていると、あまり認識してない人もいるかもしれません
今回、こんなクライアント環境で試しました
- 自端末:Windows10 x64
- Gitサーバ:GitHub
- Gitクライアントアプリ:GitExtensions
- Gitアクセスには、複数アカウントを利用している
これを試そうと思ったモチベーションは、push のたびに IDとパスワードを毎回聞かれるのがやだ、だからキーペアを利用して ssh アクセスにするんだー
というところから始まってます
GitHub のIDとパスワードをスキップして、セキュアアクセスするのだ!という方の参考になればと思います!
あと、番外編として、 非推奨ですが https アクセスでIDとパスワードを毎回聞かれないようにする方法も最後にメモしておきます
キーの生成方法 ssh-keygen
ここは普通に
公開鍵と秘密鍵を作ればいいだけなので、知ってる人に取ったら何をいまさら…になりますが、一応メモ
Gitがインストールされているなら ssh-keygen が使えますので、コマンドを打つだけ
(コマンドを打たなくても、Gitのクライアントアプリが勝手にやってくれる場合もあります)
GitBash などを起動します
コマンドはこちら
$ ssh-keygen -t rsa
基本的には、何か聞かれてもエンターで進めばOKです
デフォルトでは c:\Users\[ユーザ名]\.ssh\** 以下に秘密鍵(id_rsa)と公開鍵(id_rsa.pub)**のキーペアが作成されます
Windowsだとキーの保存位置は c:\Users\[ユーザ名]\.ssh\ にしないといけません
わたしは、Github用のキーだと判るように、名前を github_rsa として作成しました
(既に別の用途で id_rsa を使っているからです、つまり複数アカウントを利用しています)
実行結果はこれ↓↓↓
(SHA256以下の箇所は、適当に x で書き換えています)
haruka.sao@MyPC MINGW64 ~
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/haruka.sao/.ssh/id_rsa): /c/Users/haruka.sao/.ssh/github_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/haruka.sao/.ssh/github_rsa.
Your public key has been saved in /c/Users/haruka.sao/.ssh/github_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx haruka.sao@MyPC
The key's randomart image is:
+---[RSA 2048]----+
| x |
| x |
| x |
| x |
| x |
| x |
| x |
| x |
| x |
+----[SHA256]-----+
haruka.sao@MyPC MINGW64 ~
$
キーペアができたできた
SSHキーをGitHubに登録
c:\Users\[ユーザ名]\.ssh\ に保存された id_rsa.pub (わたしの場合はgithub_rsa.pub)を GitHubに登録します
自分のアカウントの Settings > SSH and GPG keys > New SSH key をクリックすると、先ほど作った公開鍵を登録することができます
先ほど作った id_rsa.pub 公開鍵を登録しましょう!
くれぐれも id_rsa の秘密鍵の方ではないので、お間違え無く!
id_rsa.pub の中身を見ればわかりますが、「ssh-rsa ……」 から始まっているファイルになります
登録すると、こんな感じの記載になります
最後に、自分の秘密鍵が c:\Users\[ユーザ名]\.ssh\ に設置されていることを再確認!
OpenSSH モード
GitExtensions で ssh 接続したい場合、
私的にはお勧めなのは、OpenSSHモードにすることです
※ PuTTYアクセスは、PuTTYの独自フォーマットのキーを登録するなどが必要ですので、わたしは利用をやめました
これで下準備はOK!
PCから ssh で接続テスト
Git bash で接続テストしてみましょう
さっきの Git bash で、リポジトリの下まで移動します
もしくは、GitExtensions から起動すると、初期ディレクトリはそのリポジトリの下になります
確認パターンは2パターンあります
(パターン1) id_rsa で登録している ssh キーを利用する場合
このコマンドで確認します
|
|
id_rsa というファイル名を、ssh 接続では自動的に認識するようです
初回は、known_hosts に GitHub サーバを登録するよ?と聞いてくるので、 yes を入力します
Hi [GitHubユーザ名]! You’ve successfully authenticated, but GitHub does not provide shell access.
が表示されればOKです
わたしの実行結果はこちら↓↓↓
$ ssh -T git@github.com
The authenticity of host 'github.com (192.30.252.122)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.252.122' (RSA) to the list of known hosts.
Hi h-sao! You've successfully authenticated, but GitHub does not provide shell access.
known_hosts ファイルがこんな感じで作られました
(パターン2) 独自の名前で作った ssh キーを利用する場合
わたしの場合は、先ほど github_rsa という名前でキーを生成したので、こちらのパターンになりました
まず、 github_rsa という独自名称を ssh アクセス時に認識させる必要があります
c:\Users\[ユーザ名]\.ssh\ 直下に config という名前のファイルを作成します
※この部分は、Gitうんぬんは関係のない、ssh 接続の話です
Windows の ssh 接続では c:\Users\[ユーザ名]\.ssh\config はすべてのSSH接続で共有されます
c:\Users\[ユーザ名]\.ssh\config の内容はこんな感じです
Host my.github.server
HostName github.com
Port 22
User h-sao
IdentityFile ~/.ssh/github_rsa
TCPKeepAlive yes
IdentitiesOnly yes
- Host
アクセス識別子なので、どんな名前でもOK - HostName
実際にアクセスするアドレス - Port
アクセスするポート番号、ssh(Secure Shell)の番号
OpenSSHのデフォは22番なので、わざわざ書かなくてもいいのですが一応記載 - User
GitHubユーザ名を入れます - IdentityFile
利用する ssh 秘密鍵ファイルのパス - TCPKeepAlive:yes
これもデフォは yes なのですが、念のため - IdentitiesOnly:yes
.ssh/config の設定を増やしていくと「Too many authentication failures」が出ることがあるらしいです、変なエラーはやなので、あらかじめ設定しておきます
<参考リンク>
SSHに公開鍵認証で接続する際に Too many authentication failures が出る - 6vox
http://blog.6vox.com/2014/11/ssh-too-many-authentication-failures.htmlOpenSSH ssf_configの設定項目 - Life with IT
http://l-w-i.net/t/openssh/conf_001.txt
ここまで準備したら、接続テストしましょう
config に設定した名前で Host の名称アクセスすることが出来ます!
|
|
うまくいくと、パターン1と同じように、known hostに登録するかどうかを聞かれて、ファイルが作成されます
また、
Hi [GitHubユーザ名]! You’ve successfully authenticated, but GitHub does not provide shell access.
こんな感じで、自分のGitHub名でアクセス出来たことが判ります
いちおキャプチャ置いときます
これで、クライアントPCから GitHub に IDとパスワードを利用せずに接続することが出来ました!
まだGitExtensions から ssh アクセスは出来ない
さて、この状態で、GitExtensions のプッシュボタンを押して Pushしようとしても、IDとパスワードを聞かれます
Pushボタンを押すと…
GitHub のアカウントとパスワードを聞かれます…
どうやら https アクセスがデフォルトみたいです
ちゃんと自身の Git リポジトリに ssh 接続するんだよー
を認識させてあげないといけません
Git リポジトリに ssh 接続設定を教える
Git リポジトリの設定を Git bash のコマンドで見ることが出来ます
$ git config -l
これらの設定は、Git リポジトリ直下にある .\.git\ 以下にあります
この下の config ファイルなどを直接編集しても反映されますが、コマンドを使った方が良いでしょう
わたしの場合の実行結果はこちら
haruk@MACBOOKPROAKIKO ~/xxx (master)
$ git config -l
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=Sao Haruka
user.email=xxx@yyy.tmp.com
core.autocrlf=True
core.excludesfile=C:\Users\haruk\Documents\gitignore_global.txt
core.editor="C:/utils/GitExtensions/GitExtensions.exe" fileeditor
merge.tool=kdiff3
diff.guitool=kdiff3
difftool.kdiff3.path=C:/utils/KDiff3/kdiff3.exe
mergetool.kdiff3.path=C:/utils/KDiff3/kdiff3.exe
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=https://github.com/h-sao/xxx.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
上記の「remote.origin.url」が Git サーバにアクセスするときの URL になるので、これを ssh でアクセスするように変更します
デフォルトの id_rsa を利用するときは
git@github.com:[ユーザID]/[リポジトリ].git
を設定します
|
|
id_rsa じゃない、別名の ssh キーファイルを利用するときの設定は
[Host名]:[ユーザID]/[リポジトリ].git
になります
|
|
GitExtensions で Push してみましょう
URL の表記がちょっと変わりましたね
無事、IDとパスワードを聞かれることなく、プッシュが成功しているはずです\(^o^)/
やったー
<参考リンク>
- gitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita
http://qiita.com/shizuma/items/2b2f873a0034839e47ce
(番外編) httpsアクセスでIDとパスワードを聞かれないようにする
ええ、今回、本当に色々と試しましたとも…
ssh ではなく https アクセスで、毎回アカウント情報を入力しない方法も調べました
あまりセキュアじゃないので、お勧めできませんが
一応記載しておきます
$ git config -l
で調べた 「remote.origin.url」 の初期の記載はこれでした
remote.origin.url=https://github.com/h-sao/xxx.git
この https アクセスの URL 中に、IDとパスワードを埋め込めばOKです
https://[ユーザID]:[パスワード]github.com/h-sao/xxx.git
やってみたけど、パスワードが丸々画面に表示されるので、よくないです…
確かに、ssh キーファイルなど用意しなくてもいいので、便利ではありますが…><;
利用は自己責任でお願いします
<参考リンク>
- Windowsにgitをインストールしてgithubにpushするまで - karakaram-blog
http://www.karakaram.com/git-install
追記記事書きました(2016/5/9)
- [SSH] 複数キー接続のconfig記載について
http://h-sao.com/blog/2016/05/09/add-ssh-config-for-git/