diff options
-rw-r--r-- | ssh/.ssh/config | 2 | ||||
-rwxr-xr-x | tmux/.local/bin/tmux-ssh | 16 |
2 files changed, 14 insertions, 4 deletions
diff --git a/ssh/.ssh/config b/ssh/.ssh/config index 3b83ada..996e9af 100644 --- a/ssh/.ssh/config +++ b/ssh/.ssh/config @@ -13,7 +13,7 @@ Host odin frigg thor loki heimdall hydra bifrost RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra RemoteForward /run/user/1000/gnupg/S.gpg-agent.ssh /run/user/1000/gnupg/S.gpg-agent.ssh ControlMaster auto - ControlPath ${XDG_RUNTIME_DIR}/ssh.%r@%h:%p + ControlPath ${XDG_RUNTIME_DIR}/ssh.%C ControlPersist 30m Host hydra diff --git a/tmux/.local/bin/tmux-ssh b/tmux/.local/bin/tmux-ssh index 470368b..a0f838b 100755 --- a/tmux/.local/bin/tmux-ssh +++ b/tmux/.local/bin/tmux-ssh @@ -27,10 +27,20 @@ if [ "$target" = "$HOST" ]; then tmux detach -E 'tmux new -A' else if ! tmux -L ssh has-session -t "$target"; then - # TODO: figure out how to get the remote user id (or $XDG_RUNTIME_DIR), *before* initial - # connection, in order to map to other user id's. + local_socket=$(tmux -L ssh start-server \; display -p "#{socket_path}") + remote_socket=$( + ssh -T \ + -o "ControlMaster=auto" \ + -o "ControlPath=${XDG_RUNTIME_DIR}/ssh.%C" \ + "$target" 'tmux -L ssh start-server \; display -p "#{socket_path}"' + ) + tmux -L ssh new-session -ds "$target" \ - ssh -t -R /tmp/tmux-1000/ssh:/tmp/tmux-1000/ssh "$target" "zsh -l -c 'tmux new -A'" + ssh -t \ + -o "ControlMaster=auto" \ + -o "ControlPath=${XDG_RUNTIME_DIR}/ssh.%C" \ + -R "$local_socket":"$remote_socket" \ + "$target" "zsh -l -c 'tmux new -A'" fi if [ -z "$TMUX" ]; then |