當連接到行為不當的 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 秒,我們將返回本地提示符。