我有一個 bash 腳本,它使用scp
.所以scp
這個腳本裡有一堆命令。 SSH 金鑰用於向其他伺服器進行身份驗證。
由於檔案非常小,因此 SSH 連線嘗試發生得非常快,而且根本不遠到腳本中,就會scp
無限期掛起。
- 沒有產生任何錯誤。
- 網路設備已從等式中消除,伺服器在同一子網路上進行即時通訊。
rsync
問題也已證明。
如果sleep
這些 scp 呼叫之間間隔 1 秒,則腳本運行平穩,不會掛起。
我應該在哪裡尋找這種明顯的速率限制?我在任何其他伺服器之間都沒有看到這一點...
答案1
有時人們設定使用 iptables 進行速率限制。
OpenSSH 具有MaxStartups
對傳入客戶端進行某些速率限制的選項。預設值(至少在我的電腦上)是10:30:100
.
人 sshd_config
或者,可以透過指定三個冒號分隔的值 start:rate:full(例如「10:30:60」)來啟用隨機提前丟棄。如果目前有 start (10) 個未經身份驗證的連接,則 sshd(8) 將以速率/100 (30%) 的機率拒絕連接嘗試。如果未經驗證的連線數量達到滿 (60),機率會線性增加,並且所有連線嘗試都會被拒絕。
另一個半常見問題和 OpenSSH 連線延遲的原因與 OpenSSH 伺服器上的一項功能有關,該功能將嘗試在連線嘗試時對傳入 IP 位址進行反向查找。我相信它需要這個 DNS 功能來與一些舊的 rhost 相容的身份驗證方法相容,我認為幾乎沒有人再使用這些功能。無論如何,如果 DNS 解析器配置不當、配置為使用損壞的解析器,或者客戶端 IP 連接的反向區域的某些內容可能損壞,則 DNS 解析功能將導致問題。
理想情況下,答案是修復 DNS 並確保您的 DNS 始終正常運作且不會出現錯誤,並且能夠快速回應。但如果您不需要 DNS 解析,那麼這裡的一個快速解決方案是阻止伺服器嘗試解析名稱。設定UseDNS no
在你的sshd_config
.