Security
連接到埠敲擊受保護資源
考慮到 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 變數發生名稱衝突。