Security

連接到埠敲擊受保護資源

  • August 30, 2013

考慮到 SF 問題“防止對 SSH 的蠻力攻擊”的出色答案,我正在考慮在測試伺服器上配置埠敲擊。我正在討論如何輕鬆連接到此伺服器和其他埠敲門伺服器。

我通常這樣配置 rsa 身份驗證、地址和使用者名/.ssh/config

Host msUpdate
   User bgates
   Hostname updates.microsoft.com
   IdentityFile ~/.ssh/id_rsa.bgates.pub

因此,我可以簡單地鍵入ssh msUpdate以登錄伺服器。據我所知/.ssh/config,沒有配置埠敲門的設施。因此,我正在考慮一個包裝腳本ssh,它將自動處理敲擊:

$ cat login
#!/bin/bash

msUpdate=( 2000 3000 4000 )
otherServer=( 1024 2048 4096 )

for PORT in ${$@}; do
   ssh -p $PORT
   sleep 1
done

ssh $@

我的問題是如何寫這for條線。我似乎無法讓腳本將參數辨識為要替換的數組的名稱。雖然表面上是一個 Bash 問題,但我在 SF 上提問是因為我覺得完成的腳本對這個站點的使用者最有用,而且還因為如果有比它更好的方法,很可能會有人讓我知道它。

您正在嘗試使用間接方法,但關聯數組(又名“雜湊”)是更好的方法。您將需要使用支持此功能的語言,例如 Bash 4、AWK、ksh93、Perl、Python 等。

如果您有 Bash 4,則可以按如下方式使用關聯數組。這些值不能是數組,但您可以使用以空格分隔的埠列表,因為列表成員不包含空格。

#!/bin/bash

declare -A servers
servers[msUpdate]='2000 3000 4000'
servers[otherServer]='1024 2048 4096'

for port in ${servers[$1]}
do
   ssh -p "$port" "$1"
   sleep 1
done

ssh "$1"

使用您要登錄的伺服器的名稱呼叫腳本:

./scriptname otherServer

使用“login”以外的其他名稱作為腳本名稱,因為這是現有執行檔的名稱。

始終避免使用全部大寫的變數名稱,以防止可能與 shell 變數發生名稱衝突。

引用自:https://serverfault.com/questions/535061