Gitで間違ったユーザでコミットしてしまったとき
Why?
- 1台のPCで2ユーザ取り扱っている時に、間違ったユーザでコミットしてしまったときに泣きたくなる
- しかも、かなりの量をコミットしていると辛い
そもそもこうするべきだった
- host と id_rsa の設定だけではなく、ローカルディレクトリの git のユーザ設定をするべきだった
$ git config --local user.name kz-engineer $ git config --local user.email kz-engineer@example.com
後処理
git ユーザをローカルで設定した後に
コミットがひとつの場合
$ git commit --amend --author="kz-engineer <kz-engineer@example.com>"
- 今までのコミット全部の場合
$ git filter-branch -f --env-filter "GIT_AUTHOR_NAME='kz-engineer'; GIT_AUTHOR_EMAIL='kz-engineer@example.com'; GIT_COMMITTER_NAME='kz-engineer'; GIT_COMMITTER_EMAIL='kz-engineer@example.com';" HEAD
TODO List
Git での Commiter と Author の違いは?git filter-branch -f --env-filter
の詳細理解
ssh-keygen とは?(基本編)
Why?
- 2つの公開鍵でsshアクセスする - kz-engineer-scrapの日記 にて気になった
- いつも使ってるものが呪文化している
What for?
ssh-keygen
とは認証用の鍵を生成、管理、および変換するOpenSSHのコマンド- Diffie-Hellman 群交換 (DH-GEX) で使われる群を生成
- 鍵失効リスト (Key Revocation List, KRL) を生成
- 与えられた鍵は revoke されたものかどうかを検査
生成できる鍵(identiry file)タイプ
-t dsa | ecdsa | ed25519 | rsa | rsa1
よくある使用法
key pair を作る
$ ssh-keygen -t rsa -C XXX@example.comX -f ~/.ssh/id_rsa.kz
$ ssh-keygen -t hoge unknown key type hoge
$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/Users/kz-engineer/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/kz-engineer/.ssh/id_dsa. Your public key has been saved in /Users/kz-engineer/.ssh/id_dsa.pub. The key fingerprint is: XXXXXXXXXXXXXXXXX kz-engineer@kz-engineer.local The key's randomart image is: +--[ DSA 1024]----+ ... +-----------------+
あるホストに対応づいた鍵をknown_hostsファイルの中から探す
$ ssh-keygen -F github.com # Host github.com found: line 3 type RSA github.com ssh-rsa XXXXXXXXXXXXXXXXXXX==
よくある失敗
- パスフレーズを忘れた
- 変更はできても、忘れたものを取り戻すことはできないので、再生成すること。
TODO List
- TODO:
/etc/rc
でシステム管理者が鍵を作成? - TODO:
OpenSSH
について深く知りたい - TODO:
SSH1
がどれくらいまずいのか - TODO: 鍵のビット数を縮めるとどれくらいまずいのか
- TODO:
The key fingerprint
とかThe key's randomart image
って可愛いけど何? - TODO: Diffie-Hellman 群交換 (DH-GEX) とは?
- TODO: それぞれの鍵タイプで何がおいしいの?
- TOOD: 鍵失効リスト (Key Revocation List, KRL)とは?
`pseudo-tty` とは?
Why?
- 以下記事にて、
pseudo-tty
について気になった
pseudo-tty
とは?
- pseudo-tty( text-terminal ) = 疑似端末
- pseudo = 擬似
- tty = 標準入出力となっている端末デバイス(制御端末、controlling terminal)の名前を表示するunixコマンドである。元来ttyとはteletypewriter(テレタイプライター)のことを指す。
$ tty /dev/ttys000 $ ls /dev/ttys* /dev/ttys0 /dev/ttys2 /dev/ttys5 /dev/ttys8 /dev/ttysb /dev/ttyse /dev/ttys000 /dev/ttys3 /dev/ttys6 /dev/ttys9 /dev/ttysc /dev/ttysf /dev/ttys1 /dev/ttys4 /dev/ttys7 /dev/ttysa /dev/ttysd
ssh -T
とは?
- sshで接続テストをする際のTオプションの説明
-T Disable pseudo-tty allocation.
Disable pseudo-tty allocation = 疑似端末の割当を無効化する
どういうときに使うか?
- 何が嬉しいのか?
$ ssh github-kz-engineer PTY allocation request failed on channel 0 Hi kz-engineer! You've successfully authenticated, but GitHub does not provide shell access. Connection to github.com closed. $ ssh -T github-kz-engineer Hi kz-engineer! You've successfully authenticated, but GitHub does not provide shell access.
-t
オプションの方が使われている?
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful,
TODO List
- TODO: pseudo-tty( text-terminal ) = 疑似端末の理解が曖昧
- TODO:
/dev/ttys*
にどんなものがあるか調べる - TODO: ttyとかptsとかの明確な理解
- TODO:
ssh -t
オプション
`~/.ssh/config` の設定順序による設定の変化
Why?
- 以下記事にて、
~/.ssh/config
内の設定順序について気になった
~/.ssh/config
の設定順序別の挙動
- 複数の公開鍵をよしなに全検索して使用してほしい場合以下の用に書く
- 上から順番に公開鍵が試されるので、先に書いた公開鍵が使用される
- 先に書かれているので
id_rsa.hoge
が使用される
IdentityFile ~/.ssh/id_rsa.hoge IdentityFile ~/.ssh/id_rsa.fuga
$ ssh -T github-hoge Hi hoge! You've successfully authenticated, but GitHub does not provide shell access.
- 先に書かれているので
id_rsa.fuga
が使用される
IdentityFile ~/.ssh/id_rsa.fuga IdentityFile ~/.ssh/id_rsa.hoge
$ ssh -T github-hoge Hi hoge! You've successfully authenticated, but GitHub does not provide shell access.
- Hostを細かく指定していても、先に書かれているので
id_rsa.fuga
が使用される
IdentityFile ~/.ssh/id_rsa.fuga Host github-hoge User git Port 22 HostName github.com IdentityFile ~/.ssh/id_rsa.hoge TCPKeepAlive yes IdentitiesOnly yes
同一PCで2つのgithubアカウントを使用する
Why?
How to
準備
~/.ssh/config
に設定を追加する
Host github-kz-engineer User git Port 22 HostName github.com IdentityFile ~/.ssh/id_rsa.kz TCPKeepAlive yes IdentitiesOnly yes
接続テスト
- ssh Tオプション(Disable pseudo-tty allocation)で接続テスト
- 接続成功
- ここで呼ばれる名前で、どの公開鍵が使われているかわかる
- 接続成功
$ ssh -T github-kz-engineer Hi kz-engineer! You've successfully authenticated, but GitHub does not provide shell access.
- 接続失敗
* $ ssh -T github-kz-engineer Permission denied (publickey).
実践
- 現在いるリポジトリでのユーザ確認
$ git config --local --list user.name=hoge user.email=hoge@example.com $ less .git/config [user] name = hoge email = hoge@example.com
- グローバルでのユーザ確認
$ git config --global --list user.name=fuga user.email=fuga@example.com $ less ~/.gitconfig [user] name = fuga email = fuga@example.com
- 実際にコミットしてみる
- 確認して実際に設定されたユーザでコミットできていればおk
$ git log commit hogehoge Author: hoge<hoge@example.com> Date: Wed Mar 2 01:28:25 2016 +0700 test
TODO List
TODO:pseudo-tty
とは?TODO:~/.ssh/config
の設定順序について
2つの公開鍵でsshアクセスする
Why?
How to
- 2つ目の鍵の作成(1つ目は既に存在している想定)
$ ssh-keygen -t rsa -C kz.engineer.jp@gmail.com -f ~/.ssh/id_rsa.kz
- 公開鍵を指定してログイン
$ ssh hoge.example.com -i ~/.ssh/id_rsa.kz
~/.ssh/config
に鍵を登録しておけば、公開鍵を指定しなくても総当たりでアクセスしてくれる
$ vi ~/.ssh/config IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/id_rsa.kz
## TODO List
TODO:
ssh-keygen
のRSA以外のタイプは?他のオプションは?TODO:
~/.ssh/config
は他に何に使う?
Macのターミナルのドルの前(プロンプト変数)のXXX-no~macbook-airの表示などを変更する
元の表示状態
kz_engineer-no~macbook-air:~ kz_engineer$
{ホスト名(コンピュータ名)}:{今いるディレクトリ} {ログインユーザ名(アカウント名)}$
デフォルト表示ルールの確認
- Macやbashでは
$PS1
というシェル変数(環境変数)に表示ルールが保存されている- PS1 = The primary(= 1) Prompt String
- PS2以降もある(TODO: 調査)
$ echo $PS1 \h:\W \u\$
- 変数の内容を変更して設定できる
$ PS1="\h:\W \u\$"
- 使える変数一覧(英語)
ホスト名(コンピュータ名)の変更の仕方
- システム環境設定 > 共有 > コンピュータ名 を変更
ログインユーザ名(アカウント名)の変更の仕方
- システム環境設定 > ユーザとグループ を起動
- 左下のロックをクリックして、管理者パスワードを入力し、設定を変更可能にする
ユーザ名の上で右クリック > 詳細 > アカウント名 を変更
- アカウント名を変えると、ホームディレクトリなどのアドレスも変わるので注意
公式資料