Ssh
iptables - 通過 ssh 命令在 FOR 循環中執行時出現“錯誤的參數 DROP”
我正在嘗試將 ip 地址列表添加到遠端伺服器上的 iptables 鏈中。如果我 ssh 進入伺服器並執行命令,它會按需要執行(一旦我 ssh 進入伺服器以測試此程式碼,我就會手動填充數組,否則數組會填充到本地伺服器上):
for IP in ${aryTEST[@]}; do sudo iptables -A test -s $IP -j DROP ; done
但是當我嘗試將它作為 ssh 命令執行時,它會因錯誤而失敗
錯誤的參數“DROP”
我執行的命令是:
ssh -p <port#> <user>@<host> "for IP in ${aryTEST[@]}; do sudo iptables -A test -s $IP -j DROP ; done"
當我在命令周圍用單引號嘗試它時,它不會返回錯誤並且似乎可以工作,但是當我檢查鏈時它是空的。
ssh -p <port#> <user>@<host> 'for IP in ${aryTEST[@]}; do sudo iptables -A test -s $IP -j DROP ; done'
使用者已被添加到 sudoers,以便能夠在沒有密碼的情況下執行 iptables 以進行測試。目前我必須遍歷數組並在單獨的 ssh 連接上執行每個 IP 地址。關於如何使這項工作的任何想法?
$
使用反斜杠 ( ) 轉義您希望保留的美元符號 (\
)。如果你使用
ssh -p <port#> <user>@<host> "for IP in ${aryTEST[@]}; do sudo iptables -A test -s $IP -j DROP ; done"
這就是它在遠端伺服器上的樣子(on
<host>
) -$IP
參數已經被評估(沒有),因此bad argument
來自 iptables 的 compltaint:for IP in 192.0.2.1 192.0.2.3 192.0.2.7; do sudo iptables -A test -s -j DROP ; done
但是您希望它看起來像:
for IP in 192.0.2.1 192.0.2.3 192.0.2.7; do sudo iptables -A test -s $IP -j DROP ; done
因此,您需要在端評估數組,而僅在遠端端評估另一個變數:
ssh -p <port#> <user>@<host> "for IP in ${aryTEST[@]}; do sudo iptables -A test -s \$IP -j DROP ; done"