# fish で ssh-pageant する


fish で ssh-pageant する

  • Cygwin の ssh-pageant.exe の出力は bash 用
  • そのまま eval (ssh-pageant -r -a "tmp/.ssh-pageant-$USERNAME") してもダメ
  • fish の set -gx ... するように ssh-pageant の出力をフィルタする

ssh-pageant の出力内容

  • ssh-pageant のオプション
    • -r : 既に SOCKET があれば使いまわす(新しく作らない)
    • -a : 指定パスに SOCKET を作る
  • ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME"
SSH_AUTH_SOCK='/tmp/.ssh-pageant-hogefuge'; export SSH_AUTH_SOCK;
SSH_PAGEANT_PID=1234; export SSH_PAGEANT_PID;
echo ssh-pageant pid 1234;

期待する出力内容

set -gx SSH_AUTH_SOCK '/tmp/.ssh-pageant-hogefuge';
set -gx SSH_PAGEANT_PID 1234;

~/.config/fish/functions/invoke-ssh-pageant.fish

function invoke-ssh-pageant
        eval (ssh-pageant.exe -r -a "/tmp/.ssh-pageant-$USERNAME" \
        | gawk -f ~/.config/fish/functions/ssh-pageant.awk)
end

~/.config/fish/functions/ssh-pageant.awk

#!/usr/bin/gawk
/SSH_AUTH_SOCK/ {
        split($0, a, "[;=]")
        print "set -gx SSH_AUTH_SOCK " a[2] ";"
}
/SSH_PAGEANT_PID/ {
        split($0, a, "[;=]")
        print "set -gx SSH_PAGEANT_PID " a[2] ";"
}

~/.config/fish/functions/config.fish

  • 適当な箇所で invoke-ssh-pageant を呼ぶ
invoke-ssh-pageant