在纯文本 SSH pty 中远程工作时,我经常(主要)使用 tmux;如果连接断开,它非常有用。我运行长时间(数小时到数天)的计算任务,并从不同的远程主机连接以检查它。这几乎是我用 tmux 做的唯一事情;我远非专业人士,所以我的问题可能非常基本,但我找不到答案。
我在主机上有一个命令,它从 shell 变量中读取并解析出客户端地址,$SSH_CONNECTION
以某种方式与我当前客户端计算机上的守护进程通信(直接,无 ssh 隧道)¹。当我附加到最初在另一台机器上启动的会话时,这会在 tmux 下中断。tmux 会话中最底层的 shell 在其启动时已经捕获了变量,并且具有启动会话的客户端计算机的地址,而不是当前附加到它的地址。
一个简单的解决方案是在 my 中完全重置此变量.bashrc
,因此该工具甚至不会尝试与 tmux 会话中的客户端连接进行通信(毕竟,如果它无法猜一个)。我相信我可以依靠$TMUX
env 变量的存在来避免在我的 .bashrc 中完全捕获 IP 地址。
但正确的做法是以某种方式从我执行tmux attach
命令的 bash 中提升这个变量。我知道它不能完全自动,因为远程上的 tmux 可能无法修改已经运行的第一个 shell 的环境。tmux
但也许我可以使用一些花哨的 tmux 脚本从运行命令的进程中提取环境变量attach
(附加的 SSH 会话机器已在其环境中正确设置它们),将值存储在会话 tmux 变量中的某处(它们是否甚至存在?),然后让我运行一个自定义命令以export SSH_SESSION=....
在我知道它是安全的时(即在会话内的 bash 提示符上)通过击键来取消(即假输入会话的 bash )?
TL; DR:tmux attach
我想要一种方法在我附加到的会话中设置环境变量tmuxer 会。
¹这不是一个好的或安全的方法,但它就是这样。我们必须在科学计算中使用很多奇怪的东西,这些东西是由其他科学家编写的,他们或者其中一些已经是,在这种情况下,不一定是优秀的软件工程师。在这个世纪我会做不同的事情,但这件事就像 30 岁一样。
SSH_CONNECTION 默认处于更新环境中,因此它将在附加的会话环境中更新,然后您可以将其复制到 tmux 内正在运行的 shell 中,如下所示: