2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

fish で ssh agent を永続化

Posted at

TL;DL

~/.config/fish/config.fishに以下を追記

set SSH_AGENT_FILE "$HOME/.ssh/ssh_agent"
test -f $SSH_AGENT_FILE; and source $SSH_AGENT_FILE > /dev/null 2>&1
if not ssh-add -l > /dev/null 2>&1
  if not ps -ef | grep -v grep | grep ssh-agent
    ssh-agent -c > $SSH_AGENT_FILE 2>&1
  end
  source $SSH_AGENT_FILE > /dev/null 2>&1
  find $HOME/.ssh -name id_rsa | xargs ssh-add
end

fish 固有の仕様や構文の解説

set

fish には代入構文がないため set コマンドを使います。

set 変数名 値

変数置換は bash などと同じように $変数名 で使用可能です。
ちなみに -x オプションを付けることで export に相当するものになります。

test [EXPRESSION]; and hogehoge

fish では 他のシェルと違って &&|| の代わりに以下を用います

&& -> and
|| -> or
!  -> not

そのため上記コード2行目 test -f $SSH_AGENT_FILE; and source $SSH_AGENT_FILE > /dev/null 2>&1 では、 $SSH_AGENT_FILE が通常のファイルの場合 source コマンドで $SSH_AGENT_FILE を評価します。

> と 2> と /dev/null

>2> は標準出力と標準エラー出力をリダイレクトするために使います。
echo "hoge" > file.txt とすることで file.txthoge に書き換えることが出来ます。
しばしば上記コード内で出てくる/dev/nullはnullデバイスとも呼ばれ、このファイルに出力することで、出力を捨てることが出来ます。
そのため hoge > /dev/null 2> /dev/nullと書くことで標準出力と標準エラー出力ともに破棄することが出来ます。
また & の後にファイル記述子の番号を入れることで短く書くことも出来ます。

source $SSH_AGENT_FILE > /dev/null 2>&1

*標準エラー出力で使われていた^は廃止され将来削除予定なので2>を使いましょう。

そのほか

ざっと fish 固有の構文や仕様などを解説しましたが、残りは bash などでも共通のものなので、上記コードがどういった流れで動作するのかを書いて終わりにしたいと思います。

  1. $SSH_AGENT_FILE が通常のファイルの場合 source コマンドを用いて評価する
  2. ssh-add -l からSSH Keyの登録を確認し無ければ分岐する
  3. ps -ef | grep -v grep | grep ssh-agent で現在動作している ssh-agent プロセスがあるか確認、なければ ssh-agent を起ち上げる
  4. ssh-agent を起動した際に書き込んだ $SSH_AGENT_FILE を再度 source コマンドを用い評価
  5. SSH Key を ssh-add に渡して登録

あとがき

これで WSL + VSCode で開発している際に Terminal を立ち上げるたび passphrase を入力しなくてすみます!すみました!🎉

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?