aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--ssh/.ssh/config2
-rwxr-xr-xtmux/.local/bin/tmux-ssh16
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