防止 tmux 在 SSH 上启动

防止 tmux 在 SSH 上启动

tmux当我从现有 tmux 会话 ssh 到计算机上时,我想创建一个新窗口。但是,我不想在新机器上启动 tmux 会话!

我的 中有以下内容.bashrc,以便tmux自动启动:

if [[ "$TERM" != "screen" ]]
then
   # try to attach to existing session, or start a new one
   tmux attach-session -t "$USER" || tmux -2 new-session -s "$USER"
   exit
fi

我还有一个ssh功能:

alias ssh='ssh_func'
ssh_func (){
    if [[ "$TERM" == "screen" ]]; then
        tmux new-window -n "$1" "ssh $@";
    else
        /usr/bin/ssh "$@";
    fi
}

这工作正常,但我不希望在我通过 ssh 连接的机器上启动 tmux 会话,因为这会在同一个终端窗口中提供 2 个会话。.bashrc如果从 tmux 会话调用 ssh 命令,是否可以在我的计算机上放入任何内容,以便 tmux 不会在计算机上启动?

我正在使用 PuTTY 和 tmux 1.5。

答案1

鉴于您发布的代码,如果您从 tmux 中运行 ssh,您将拥有$TERM= screen,因此您不会尝试附加到 tmux 窗口。换句话说,您已有的代码应该可以按预期工作。有一些可疑的事情发生。确保您的点文件不会弄乱TERM变量(如果您需要修改TERM,这种情况非常罕见,请确保仅在非常特定的情况下才进行此操作;特别是如果是 ,则不要更改它screen)。

答案2

您可以测试SSH_CONNECTION环境变量是否存在:如果定义了该变量,则 shell 已从 SSH 启动。例如:

if [ -n "$SSH_CONNECTION" ]; then
  # running within SSH session, do not start tmux
  ...
else
  # logged in from console/terminal, start tmux
  tmux ...
fi

该变量包含四个空格分隔的值:客户端 IP 地址、客户端端口号、服务器 IP 地址和服务器端口号。您可以使用它进行更复杂的匹配,例如:

case "$SSH_CONNECTION" in
  client.ip.v4.addr*)
   # client is client.ip.v4.addr != this host's addr
   echo "you're connecting from a remote host, starting tmux"
   tmux ...
   ;;
  *server.ip.v4.addr)
   # if server.ip.v4.addr == this hosts' address, then SSH_CONNECTION
   # is not inherited from another connection
   echo "SSH_CNNECTION is not stale"
   ;;
  '') 
   # no SSH_CONNECTION at all
   ;;
esac

有关环境变量的更多详细信息,SSH_CONNECTION请参阅“环境”部分ssh(1) 联机帮助页

相关内容