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