#!/usr/bin/env bash # setting the locale, some users have issues with different locales, this forces the correct one export LC_ALL=en_US.UTF-8 show_ssh_session_port=$1 parse_ssh_port() { # Get port from connection local port=$(echo $1|grep -Eo '\-p\s*([0-9]+)'|sed 's/-p\s*//') if [ -z $port ]; then local port=22 fi echo $port } get_ssh_user() { local ssh_user=$(whoami) for ssh_config in `awk ' $1 == "Host" { gsub("\\\\.", "\\\\.", $2); gsub("\\\\*", ".*", $2); host = $2; next; } $1 == "User" { $1 = ""; sub( /^[[:space:]]*/, "" ); printf "%s|%s\n", host, $0; }' /etc/ssh/ssh_config`; do local host_regex=${ssh_config%|*} local host_user=${ssh_config#*|} if [[ "$1" =~ $host_regex ]]; then ssh_user=$host_user break fi done for ssh_config in `awk ' $1 == "Host" { gsub("\\\\.", "\\\\.", $2); gsub("\\\\*", ".*", $2); host = $2; next; } $1 == "User" { $1 = ""; sub( /^[[:space:]]*/, "" ); printf "%s|%s\n", host, $0; }' .ssh/config`; do local host_regex=${ssh_config%|*} local host_user=${ssh_config#*|} if [[ "$1" =~ $host_regex ]]; then ssh_user=$host_user break fi done echo $ssh_user } get_remote_info() { local command=$1 # First get the current pane command pid to get the full command with arguments local cmd=$({ pgrep -flaP `tmux display-message -p "#{pane_pid}"` ; ps -o command -p `tmux display-message -p "#{pane_pid}"` ; } | xargs -I{} echo {} | grep ssh | sed -E 's/^[0-9]*[[:blank:]]*ssh //') local port=$(parse_ssh_port "$cmd") local cmd=$(echo $cmd|sed 's/\-p\s*'"$port"'//g') local user=$(echo $cmd | awk '{print $NF}'|cut -f1 -d@) local host=$(echo $cmd | awk '{print $NF}'|cut -f2 -d@) if [ $user == $host ]; then local user=$(get_ssh_user $host) fi case "$1" in "whoami") echo $user ;; "hostname") echo $host ;; "port") echo $port ;; *) echo "$user@$host:$port" ;; esac } get_info() { # If command is ssh get info from remote if $(ssh_connected); then echo $(get_remote_info $1) else echo $($1) fi } ssh_connected() { # Get current pane command local cmd=$(tmux display-message -p "#{pane_current_command}") [ $cmd = "ssh" ] || [ $cmd = "sshpass" ] } main() { hostname=$(get_info hostname) user=$(get_info whoami) # Only show port info if ssh session connected (no localhost) and option enabled if $(ssh_connected) && [[ $show_ssh_session_port == "true" ]] ; then port=$(get_info port) echo $user@$hostname:$port else echo $user@$hostname fi } main