mirror of
https://github.com/DictXiong/dotfiles.git
synced 2024-11-24 16:07:02 +08:00
rewrite piv-agent to sagent; fmt_note and fmt_into will write to stderr
This commit is contained in:
parent
a9850e7e3f
commit
13353fcac5
39
.zshrc2
39
.zshrc2
|
@ -113,44 +113,7 @@ if [[ -x $(command -v trash) ]]; then
|
|||
alias "rm"="echo use the full path i.e. '/bin/rm'\; consider using trash"
|
||||
fi
|
||||
gbes() { git for-each-ref --sort=-committerdate refs/heads refs/remotes --format="%(authordate:format:%y-%m-%d.%a %H:%M %z)|%(color:red)%(objectname:short)|%(color:yellow)%(refname:short)%(color:reset)|%(color:reset)%(authorname): %(color:green)%(subject)" --color=always | column -ts"|" | less -FX }
|
||||
piv-agent()
|
||||
{
|
||||
local agent_file="/tmp/piv-agent-$(whoami)"
|
||||
if [[ -f $agent_file ]]; then
|
||||
source $agent_file
|
||||
fi
|
||||
# they are: ubuntu, macos, respectively
|
||||
local SO_PATHS=( "/usr/lib64/opensc-pkcs11.so" "/usr/local/lib/opensc-pkcs11.so" )
|
||||
local SO_FILE
|
||||
for SO_FILE in ${SO_PATHS[*]}; do
|
||||
if [[ -f "$SO_FILE" ]]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ ! -f "$SO_FILE" ]]; then
|
||||
echo "error: opensc-pkcs11.so not found"
|
||||
return 1
|
||||
fi
|
||||
if ! ps -p "$SSH_AGENT_PID" > /dev/null; then
|
||||
echo "launch agent using: $SO_FILE"
|
||||
ret=$(ssh-agent -P "$SO_FILE")
|
||||
echo "$ret" > $agent_file
|
||||
eval "$ret"
|
||||
if ! ps -p $SSH_AGENT_PID > /dev/null; then
|
||||
echo "failed to launch agent"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "using existing agent: $SSH_AGENT_PID"
|
||||
fi
|
||||
if ! ssh-add -l > /dev/null; then
|
||||
echo "no keys found in this agent, let's add some"
|
||||
ssh-add -s "$SO_FILE"
|
||||
fi
|
||||
pgrep ssh-agent | grep -v $SSH_AGENT_PID | xargs kill -9
|
||||
echo "now available keys:"
|
||||
ssh-add -l
|
||||
}
|
||||
piv-agent() { eval "$($DOTFILES/tools/sagent.sh $@)" }
|
||||
|
||||
# key bindings
|
||||
bindkey "^b" beginning-of-line # ctrl+b
|
||||
|
|
|
@ -75,11 +75,11 @@ fmt_warning() {
|
|||
}
|
||||
|
||||
fmt_info() {
|
||||
printf '%sinfo: %s\n' "${FMT_RESET}" "$*" >&1
|
||||
printf '%sinfo: %s\n' "${FMT_RESET}" "$*" >&2
|
||||
}
|
||||
|
||||
fmt_note() {
|
||||
printf '%s%s%s\n' "${FMT_GREEN}" "$*" "${FMT_RESET}" >&1
|
||||
printf '%s%s%s\n' "${FMT_GREEN}" "$*" "${FMT_RESET}" >&2
|
||||
}
|
||||
|
||||
setup_color() {
|
||||
|
|
105
tools/sagent.sh
Executable file
105
tools/sagent.sh
Executable file
|
@ -0,0 +1,105 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
THIS_DIR=$( cd "$( dirname "${BASH_SOURCE[0]:-${(%):-%x}}" )" && pwd )
|
||||
export DFS_COLOR=1
|
||||
source "$THIS_DIR/common.sh"
|
||||
|
||||
|
||||
find_so_file()
|
||||
{
|
||||
local SO_PATHS=( "/usr/lib64/opensc-pkcs11.so" "/usr/local/lib/opensc-pkcs11.so" )
|
||||
local SO_FILE
|
||||
for SO_FILE in ${SO_PATHS[*]}; do
|
||||
if [[ -f "$SO_FILE" ]]; then
|
||||
echo "$SO_FILE"
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
create_agent()
|
||||
{
|
||||
local SO_FILE=$(find_so_file)
|
||||
if [[ -n "$SO_FILE" ]]; then
|
||||
fmt_note "opensc-pkcs11.so found"
|
||||
SO_FILE="-P $SO_FILE"
|
||||
fi
|
||||
ssh-agent $SO_FILE
|
||||
}
|
||||
|
||||
kill_agent()
|
||||
{
|
||||
if pgrep -x ssh-agent > /dev/null; then
|
||||
fmt_note "killing existing agent"
|
||||
pkill -9 -x ssh-agent
|
||||
fi
|
||||
}
|
||||
|
||||
add_piv()
|
||||
{
|
||||
local SO_FILE=$(find_so_file)
|
||||
if [[ -n "$SO_FILE" ]]; then
|
||||
echo ssh-add -s \"$SO_FILE\"
|
||||
else
|
||||
fmt_error "opensc-pkcs11.so not found"
|
||||
fi
|
||||
list
|
||||
}
|
||||
|
||||
list()
|
||||
{
|
||||
echo echo "available keys:"
|
||||
echo ssh-add -l
|
||||
}
|
||||
|
||||
reset()
|
||||
{
|
||||
kill_agent
|
||||
all
|
||||
}
|
||||
|
||||
all()
|
||||
{
|
||||
local agent_file="/tmp/piv-agent-$(whoami)"
|
||||
if [[ -f $agent_file ]]; then
|
||||
source $agent_file > /dev/null
|
||||
else
|
||||
touch $agent_file
|
||||
chmod 600 $agent_file
|
||||
fi
|
||||
if ! ps -p "$SSH_AGENT_PID" > /dev/null; then
|
||||
kill_agent
|
||||
fmt_note "launching a new agent"
|
||||
create_agent | tee $agent_file
|
||||
else
|
||||
fmt_note "using existing agent: $SSH_AGENT_PID"
|
||||
cat $agent_file
|
||||
fi
|
||||
}
|
||||
|
||||
route()
|
||||
{
|
||||
if [[ $# -eq 0 ]]; then
|
||||
all
|
||||
return
|
||||
fi
|
||||
case $1 in
|
||||
kill)
|
||||
kill_agent
|
||||
;;
|
||||
piv)
|
||||
add_piv
|
||||
;;
|
||||
reset)
|
||||
reset
|
||||
;;
|
||||
list|ls)
|
||||
list
|
||||
;;
|
||||
*)
|
||||
fmt_error "unknown command: $1"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
route "$@"
|
|
@ -18,6 +18,7 @@ grep -q ".zshrc2" ~/.zshrc
|
|||
dfs version
|
||||
dfs log 1
|
||||
dfs beacon gh.ci $GITHUB_SHA
|
||||
sagent
|
||||
z ~
|
||||
test ~ -ef "$(pwd)"
|
||||
dogo
|
||||
|
|
Loading…
Reference in New Issue
Block a user