我想在 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}'
。