32 lines
1.0 KiB
Bash
Executable File
32 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
|
|
SSH_SERVERS="$(grep 'Host ' "${HOME}/.ssh/config" | sed 's/^Host //')"
|
|
HOSTS="$(grep -v '^#' /etc/hosts)"
|
|
HISTORY_HOSTS="$(grep ssh "${HOME}/.zsh_history" | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')"
|
|
|
|
ALL_HOSTS="$(echo "$SSH_SERVERS" "$HOSTS" "$HISTORY_HOSTS" | grep -v '\*'| sed 's/ /\n/g' | sed '/^$/d' | sort | uniq | tac)"
|
|
|
|
SSH_SERVER="$(echo -n "$ALL_HOSTS" | fzf +m --print-query --bind 'tab:replace-query' | tail -n 1)"
|
|
|
|
|
|
if [[ -z "${SSH_SERVER}" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
|
|
SSH_SERVER_SESSION_NAME="${SSH_SERVER//\./-}"
|
|
SSH_SERVER_SESSION_NAME="${SSH_SERVER_SESSION_NAME//:/-}"
|
|
SSH_SERVER_SESSION_NAME="${SSH_SERVER_SESSION_NAME%% *}"
|
|
declare -r SESSION="ssh_${SSH_SERVER_SESSION_NAME}"
|
|
|
|
|
|
if ! tmux has-session -t "${SESSION}" 2>/dev/null; then
|
|
tmux new-session -s "${SESSION}" -d -n "1" "ssh ${SSH_SERVER} || read"
|
|
fi
|
|
|
|
tmux set-option -t "${SESSION}" status off
|
|
tmux set-option -t "${SESSION}" prefix None
|
|
tmux set-option -t "${SESSION}" key-table off
|
|
tmux switch-client -t "${SESSION}" |