ssh-agent に鍵を登録しても再起動(シェル再起動)時に消えてしまっている(使えない)ときの原因の一つ

結論

ssh-agent が以下のように複数起動していないでしょうか。

$ ps aux | grep ssh-agent
foobar  229998  0.0  0.0   7972  1080 ?        Ss   08:35   0:00 ssh-agent
foobar  230400  0.0  0.0   7972  3504 ?        Ss   08:36   0:00 ssh-agent
foobar  232466  0.0  0.0   7972  1080 ?        Ss   08:37   0:00 ssh-agent
foobar  233438  0.0  0.0   7972  4440 ?        Ss   08:39   0:00 ssh-agent
foobar  234495  0.0  0.0   7972  4524 ?        Ss   08:40   0:00 ssh-agent
foobar  235810  0.0  0.0   7972  4524 ?        Ss   08:41   0:00 ssh-agent
foobar  236866  0.0  0.0   7972  4460 ?        Ss   08:41   0:00 ssh-agent
foobar  239003  0.0  0.0   7972  4532 ?        Ss   08:48   0:00 ssh-agent
foobar  240367  0.0  0.0   7972  1084 ?        Ss   08:50   0:00 ssh-agent
foobar  240625  0.0  0.0   4796  2440 pts/0    S+   08:52   0:00 grep ssh-agent

シェルの設定ファイルの書き方によってはログインのたびに ssh-agent が起動してしまい、これが原因で正常に鍵を使うことができません。

(参考)ssh-agent を複数起動させない自動起動スクリプト

if [ -f ~/.ssh-agent ]; then
    . ~/.ssh-agent
fi
if [ -z "$SSH_AGENT_PID" ] || ! kill -0 $SSH_AGENT_PID; then
    ssh-agent > ~/.ssh-agent
    . ~/.ssh-agent
fi
ssh-add -l >& /dev/null || ssh-add

参考

h2plus.biz

GitHub Actions の Secrets を $ gh secret set で渡すときに \n が含まれているときはファイル出力経由で渡す

具体例

"foo\nbar\nhoge\nfuga" という文字列を MY_SECRET という Secrets で渡したいとします。

だめな例

$ gh secret set MY_SECRET "foo\nbar\nhoge\nfuga"

OKな例

まず \n を改行に変換したテキストファイルを用意します*1

以下のテキストファイルを my_secret.txt とします。

foo
bar
hoge
fuga

あとはこれを リダイレクトで gh secret set します。

$ gh secret set MY_SECRET < my_secret.txt

*1:sed を使えば楽でしょう

git stash でコンフリクトした際に戻すには git reset --merge する

結論

標題のとおりです。

$ git stash --abort を誰もが一度は即座に実行するかと思いますが、そういうオプションは今のところ無いので、$ git reset --merge で戻します。

補足

$ git stash pop を実行した結果コンフリクトしたとします。

その後に $ git reset --merge を実行することで $ git stash pop は無かったことになりますが、その場合、stash はちゃんと元に戻っています*1

考察

$ git stash をするとき、どうしてもタイプ数を抑えたいので $ git stash --save "名前" をしないことが多いです。が、そうすると stash がたまりまくってしまい、どれがどれだか分からなくなってしまいます。

stash は原則必ず戻すもの、という考えが守られていれば $ git stash pop が適宜適切に行われ、$ git stash list はいつも空になります。

が、そううまくはいかないもので、stash して寝て次の日になって、さらにそれを繰り返して、ということをしていると、ある日よく分からない大量の stash が $ git stash list にてお目見えすることになります。

面倒でも $ git stash --save "名前" をするのがよさそうです。あとはこまめに stash を掃除してあげたほうがよさそうです。

参考

stackoverflow.com

*1:コンフリクトの解消はできたけど stash のデータが消えた、ということにはならない

YubiKey 5 NFC を買った

  • 理由は Mac のログインを楽にしたいから*1
  • それ以外の用途だと 1Password の利便性の方が勝っているので、なにか面白い使い方はないかと調査中
  • 指紋認証可能バージョンは値段的に冒険しすぎな感がしたので、使っていく中で便利そうなら乗り換えたい

参考ページ

note.com

yoshiori.hatenablog.com

zenn.dev

gigazine.net

アフィリエイトリンク

*1:貸与されているマシンなので、パスワードが原則変更できない

Powered by はてなブログ