mirror of
https://github.com/DictXiong/dotfiles.git
synced 2025-07-03 06:00:30 +08:00
* feat(riot-config): default port 12022 * fix(ci) * feat(riot-config): remove tailing dot from .domain; remove j.remote and x.domain * feat(riot): *.batch * feat(riot): run command in tmux window(s) note that spaces in ssh commands are still not supported * feat(riot): -o RequestTTY=yes * fix(riot): SSH_OPTIONS * fix(riot): tmux use bash * feat(zshrc): use() * fix(riot): scp, and ci note that riot still has problems with spaces. we should use array to handle parameters. * fix(ci): update macos image * feat: update email * feat: revert git email * feat(ssh): update keys * feat(sagent): sagt op * fix(sagent): error note * fix(ci): test of auto-dep * feat(ssh): remove keys ltp1-bd and ltp1 * feat(riot): rm - remove host keys * build(ci): update to ubuntu-latest and Yikun/hub-mirror-action@v1.5 * feat: remove frigg-client.log * feat(riot): -t or --trust to set RIOT_TRUST_SERVER * feat(zshrc/alias): add sc and t, remove cps and mvs feat(zshrc/plugins): add man and web-search, remove ufw * feat(riot): refactor argparse feat(riot): add `--password` and `--` feat(common.sh): argparse supports `--` feat(riot): refactor ping to ping remote * feat(riot): sshd can specify the local port * feat(riot): print help when no argument or no remote * fix(riot): ci * feat(riot): better print_cmd with escape * feat(riot-config): support sed* * fix(frigg): hostname converted into lower case
121 lines
2.3 KiB
Bash
Executable File
121 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
THIS_DIR=$( cd "$( dirname "${BASH_SOURCE[0]:-${(%):-%x}}" )" && pwd )
|
|
export DFS_COLOR=1
|
|
source "$THIS_DIR/common.sh"
|
|
|
|
|
|
SO_PATHS=(
|
|
"/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so" # ubuntu 22.04
|
|
"/run/current-system/sw/lib/opensc-pkcs11.so" # nixos 23.05
|
|
"/Library/OpenSC/lib/opensc-pkcs11.so" # macos 13.4
|
|
)
|
|
|
|
find_so_file()
|
|
{
|
|
local SO_FILE
|
|
for SO_FILE in ${SO_PATHS[*]}; do
|
|
if [[ -f "$SO_FILE" ]]; then
|
|
echo "$SO_FILE"
|
|
return
|
|
fi
|
|
done
|
|
}
|
|
|
|
create_agent()
|
|
{
|
|
local IFS=","
|
|
ssh-agent -P "${SO_PATHS[*]},/nix/store/*"
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
add_id25519_with_op()
|
|
{
|
|
SSH_ASKPASS_REQUIRE=force SSH_ASKPASS="$THIS_DIR/sagent-op.sh" timeout 60s ssh-add ~/.ssh/id_ed25519 || fmt_fatal "timed out when adding the key. probably the passphrase is wrong or 1password-cli is not working"
|
|
list
|
|
}
|
|
|
|
list()
|
|
{
|
|
echo echo "available keys:"
|
|
echo ssh-add -l
|
|
}
|
|
|
|
reset()
|
|
{
|
|
kill_agent
|
|
all
|
|
}
|
|
|
|
all()
|
|
{
|
|
test -d ~/.ssh || mkdir ~/.ssh
|
|
local agent_file=~/.ssh/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" 1>/dev/null 2>&1; 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()
|
|
{
|
|
os_type="$(get_os_type)"
|
|
if [[ "$os_type" == "msys" || "$os_type" == "cygwin" ]]; then
|
|
fmt_fatal "unsupported platform: $os_type. you may use WinCryptSSHAgent."
|
|
fi
|
|
if [[ $# -eq 0 ]]; then
|
|
all
|
|
return
|
|
fi
|
|
case $1 in
|
|
kill)
|
|
kill_agent
|
|
;;
|
|
piv)
|
|
add_piv
|
|
;;
|
|
op)
|
|
add_id25519_with_op
|
|
;;
|
|
reset)
|
|
reset
|
|
;;
|
|
list|ls)
|
|
list
|
|
;;
|
|
*)
|
|
fmt_error "unknown command: $1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
route "$@"
|