关闭 tmux 会话时结束 SSH 会话

Posted

技术标签:

【中文标题】关闭 tmux 会话时结束 SSH 会话【英文标题】:End SSH session when closing tmux session 【发布时间】:2013-07-03 22:57:38 【问题描述】:

我已将以下内容添加到我的.zshrc,以便 tmux 在通过 SSH 登录时创建新会话或附加到现有会话:

if [[ -z $TMUX && -n $SSH_TTY ]]; then
  me=$(whoami)

  if tmux has-session -t $me 2>/dev/null; then
    tmux -2 attach-session -t $me
  else
    tmux -2 new-session -s $me
  fi
fi

这似乎有效。但是,如果我退出我的 tmux 会话,我会被送回 zsh。

我可以让 tmux 会话中的exit 也结束 SSH 会话吗?更好的是:tmux 中的exit 可以分离 tmux 会话,然后结束 SSH 会话吗?

我在想,在 [[ -n $TMUX ]] 时定义的 zsh 别名可能会起作用,但我不确定什么会起作用...

【问题讨论】:

【参考方案1】:

你可以在运行 tmux 时使用exec。它将完全控制您正在启动的作业,一旦该进程退出(无论是 tmuxechols),shell 就会退出。

来自man zshbuiltins exec ... 将当前 shell 替换为外部命令而不是分叉。

if [[ -z $TMUX && -n $SSH_TTY ]]; then
  me=$(whoami)

  if tmux has-session -t $me 2>/dev/null; then
     exec tmux -2 attach-session -t $me
  else
     exec tmux -2 new-session -s $me
  fi
fi

另一种选择是放置一个启动或加入 tmux 的 shell 脚本,并要求 ssh 运行它而不是你的 shell。

 `alias tmux-ssh="ssh user@target-host -t /home/foo/my-tmux-script`

(该脚本显然必须位于您的远程主机上)

【讨论】:

完美!谢谢 :) 去找exec 让它与远程客户端无关,因为我不必记住执行远程命令。

以上是关于关闭 tmux 会话时结束 SSH 会话的主要内容,如果未能解决你的问题,请参考以下文章

Tmux简单使用

Tmux的快捷键

保持SSH会话活动[关闭]

tmux的常用命令

会话tmux的简单使用

CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)