我想在 ssh 后自动使用 tmux 或 screen。我在 .ss/config 中编写了一些代码,这对我有帮助。
# ~/.ssh/config
Match exec "[[ $(ps h o args p $PPID | wc -w) -eq 2 ]]"
RemoteCommand SESSION_NAME="debek"; tmux a -t ${SESSION_NAME} || tmux new -s ${SESSION_NAME} || screen -r ${SESSION_NAME} || screen -S ${SESSION_NAME}
RequestTTY yes
目前,有一个问题。如果我想从本地计算机上的第二个终端连接到同一服务器,这显然会将我附加到相同的会话名称“debek”。我可以SCREEN_NAME="debek-{RANDOM}"
使用一个唯一的会话名称来解决这个问题,但是当我失去连接并尝试再次连接时,它会为我创建一个新的会话名称,而不是自动连接到我的上一个会话名称。
您知道如何解决这个问题吗?
答案1
您可以做以下几件事:
不要使用 .ssh/config,而是创建一个 ssh 并附加到 tmux 的别名。然后您可以选择在 ssh 时是否从每个终端连接。
为主机名创建两个别名(在 /etc/hosts 或 DNS 中),并将 .ssh/config 配置为仅在连接到其中一个而不连接到另一个时才运行 tmux。
使远程命令仅附加到 tmux(如果尚未附加),例如通过检查
tmux has 2>/dev/null && [ $(tmux lsc -t$SESSION_NAME|wc -l) -eq 0 ]
.或者tmux display -pt$SESSION_NAME '#{session_attached}'
。