«

""


[SSH] 複数キー接続のconfig記載について

前回、
[Git] Gitで利用するsshキーペアの作成、ssh接続、複数ID接続
で Gitサーバにアクセスするための ssh 接続について記載しました

その追記メモです

.\.ssh\config ファイルに記載する内容

Git アクセス に ssh を利用する際に、複数アカウントを利用したい
つまり、複数 ssh キーを利用したい
という場合についてです

もし、利用するキーの名前が id_rsa であれば
これはデフォルトで認識される名前なので、わざわざ .\.ssh\config ファイルに記載しなくても接続OK
でした

つまり例えば、

  1. 元々 社内用 Git サーバのアクセスに id_rsa を利用していた
  2. 追加で、GitHub にアクセスするキー(github_rsa など別名称)を作成した

こんな場合があったとします

.\.ssh\config ファイルに記載する内容は 2. の github_rsa のものだけでOKです

もちろん、 1. の id_rsa を書いても問題ないですし、コンフィグにちゃんと記載されている方が、後々判りやすいと思いますが
無理に config に追記しなくてもわたしの環境では問題なく接続できました

参考までに~(^^)/


[Git] Gitで利用するsshキーペアの作成、ssh接続、複数ID接続

しょっちゅう作っては、作り方を忘れ、また検索で調べる…ということをしているので、sshキーの生成&接続について、忘れないようにメモしておきます

GitサーバへSSHキーを使って接続したい

Gitサーバに接続するには、

この2種類の接続方法があるみたいです

Git接続用のクライアントアプリは、どっちで接続するか選択できるものもあるので
Sourcetreeなどを使っていると、あまり認識してない人もいるかもしれません

今回、こんなクライアント環境で試しました

これを試そうと思ったモチベーションは、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 キーを利用する場合

このコマンドで確認します

$ ssh -T git@github.com

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

<参考リンク>

ここまで準備したら、接続テストしましょう
config に設定した名前で Host の名称アクセスすることが出来ます!

$ ssh -T my.github.server

うまくいくと、パターン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

を設定します

$ git remote set-url origin git@github.com:h-sao/xxx.git

id_rsa じゃない、別名の ssh キーファイルを利用するときの設定は

[Host名]:[ユーザID]/[リポジトリ].git

になります

$ git remote set-url origin my.github.server:h-sao/xxx.git

GitExtensions で Push してみましょう

URL の表記がちょっと変わりましたね
無事、IDとパスワードを聞かれることなく、プッシュが成功しているはずです\(^o^)/

やったー

<参考リンク>

(番外編) 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 キーファイルなど用意しなくてもいいので、便利ではありますが…><;

利用は自己責任でお願いします

<参考リンク>

追記記事書きました(2016/5/9)


[GitExtensions] 行単位で変更をリセットするRコマンド

GitExtensions を使ってみました

GitExtensions では、commit 時に、行を選択して
その選択部分だけをリセットする(コミット前に合わせる)という機能があります

以下↓↓↓のような適当なファイルがコミットされていたとします

ファイルの下に、変更を追加してみました

Giet Extensionsを見ると、ファイルが変更されたので、Commit(1) になっています

差分は、以下のような感じ
追加した 「20」、 「100…」 の数字が、緑色の変更分として表れていますね

実は、これは作成中のプログラムなどで、
「100…」 の部分は、Commit には不要だったとします

そこで、以下のように、Commit には不要だなと思った部分を選択して [R] キーを押してみます

以下↓↓↓のような感じで、ここの行消してもいいの?と聞いてくれます

「はい」にすると、元のファイルから、選択した行を削除してくれます

この動作は、Commitした/しないに関わらず、元ファイルに反映されます

「はい」を押したあとのファイルの状態↓↓↓

あぁーあそこ、削除しとかなきゃ。。。
というときに、元ファイルに戻ってから、再度コミットする、
という手間が省けます

便利やね(^^)/


[Git] ローカルを強制上書きして、作業をなかったことにしたい

ローカルの作業が何やらおかしくなったから
リモートのファイル内容に戻したい~という時
以下のコマンドでさくっと戻りました

git fetch origin
git reset --hard origin/master

ツールなどで強制的にsyncさせようとしても

failed to sync this branch

という悲しいお知らせが出て、結局 Git Bash に行くことになりますので……

(参考リンク)