#!/bin/sh if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then tmux_sock=$(tmux display -p "#{socket_path}") tmux -S "${tmux_sock}.control" run-shell "$(basename "$0") $*" exit 0 fi HOST=$(tmux display -p '#h' 2>/dev/null) ATTACHED=$(tmux display -p "#{?#{m:*ssh,#{socket_path}},#{s/_/./:session_name},#{host}}") sessions() { { tmux -L ssh ls -F '#{?session_last_attached,#{session_last_attached},#{session_created}}:#{s/_/./:session_name}' tmux ls -F '#{?session_last_attached,#{session_last_attached},#{session_created}}:#{host}' } 2>/dev/null | sort -u | cut -d':' -f2 } if [ "$#" -eq 0 ]; then set -- "$( sessions | sshr --resolve --port 22 --scan 0.0.0.0/24 --exclude "$ATTACHED" --include - | fzf-tmux -p20%,20% -- --print-query | tail -1 )" elif [ "$1" = "-1" ] 2>/dev/null; then set -- "$(sessions | sed "/$ATTACHED/d" | head -n1)" fi if [ -z "$1" ]; then exit 0 fi while read -r k v; do case "$k" in "hostname") hostname=$v session=$(printf '%s' "$v" | tr '.' '_') break ;; esac done <<-EOF $(ssh -G "$@") EOF if [ "${hostname##"$HOST"}" != "$hostname" ]; then tmux detach -E 'tmux new -A' else if ! tmux -L ssh has-session -t "$session" 2>/dev/null; then tmux -L ssh new-session -ds "$session" -- \ ssh -t "$@" \ -R "/tmp/tmux-${HOST}.control:/tmp/tmux-%i/ssh" \ -- "zsh -l -c 'tmux -S /tmp/tmux-${HOST} new -A'" fi if [ -z "$TMUX" ]; then tmux -L ssh attach -t "$session" else tmux detach -E "tmux -L ssh attach -t $session" fi exit 0 fi