達到互動式會話的 SSH 連線逾時

達到互動式會話的 SSH 連線逾時

當連接到行為不當的 SSH 伺服器時,如果短時間內未到達互動式控制台,是否可以使用一個標誌或設定設定來告訴客戶端提前放棄?

我知道-o ConnectTimeout當主機無法存取時,它將中止連線。在這種情況下,主機可以存取且初始連線很快發生(「伺服器接受金鑰」不到 1 秒),但 PAM 某些層的故障意味著我可能會在 3 秒、12 秒或絕不。連接會停止,直到我發送 Ctrl+C 或等待 90 秒出現“連接到 [主機] 連接埠 22 逾時”

在根本原因解決之前(我不希望用這個問題來解決),我可以採取什麼措施來減輕症狀?如果我們在 5 秒內沒有收到有用的提示,我想自動斷開連線。

答案1

如果底層連接穩定且我們的主要目標是在不玩 PAM 輪盤賭的情況下開啟多個會話,「主」模式可能會有所幫助:

ssh -M -S /tmp/reusable.sock user@host

一旦你第一次贏得了 Ctrl+C/90 秒超時戰鬥,其他終端可能會通過以下方式快速打開:

ssh -S /tmp/reusable.sock user@host

只要原始連線保持開啟狀態,此操作就有效。連線時間的減少假設問題出在身分驗證步驟(因為像這樣多工套接字會繞過重新驗證)

答案2

如果連接在連接埠轉送設定之前停止,我們可以利用套接字作為信號量並組合我們自己的看門狗:

lfg.sh:

#!/bin/bash
set -m

function watchdog {
    sleep $1
    if [[ ! -S "/tmp/lfg.$2" ]]; then
        kill -STOP $3
    fi
}

ssh -L /tmp/lfg.$$:localhost:1234 $1 && rm -f /tmp/lfg.$$ &
watchdog $2 $$ $! &
fg %-

用法:

lfg grumpy-host 5

lfg首先啟用作業控制,然後啟動請求轉送至任意遠端連接埠的ssh本機套接字。/tmp/lfg.nnn將此作業放在後台,我們要求看門狗函數等待 5 秒,然後尋找套接字。如果不存在,請終止停止的 ssh 進程。fg %-將 ssh 放回前台,以便一旦它可以交互,我們就可以進入;如果花費的時間超過 5 秒,我們將返回本地提示符。

相關內容