考虑到 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 上提问是因为我觉得完成的脚本对这个网站的用户最有用,而且如果有比它更好的方法,很可能会有人让我知道它。
您需要在 for 循环中使用数组名称
更好的是主观的,我已经看到用这样的脚本实现端口敲击,但它使用 nmap 来做敲门而不是 ssh
您可能还需要考虑像Duo Security的两因素身份验证这样的替代方案。
您正在尝试使用间接方法,但关联数组(又名“哈希”)是更好的方法。您将需要使用支持此功能的语言,例如 Bash 4、AWK、ksh93、Perl、Python 等。
如果您有 Bash 4,则可以按如下方式使用关联数组。这些值不能是数组,但您可以使用以空格分隔的端口列表,因为列表成员不包含空格。
使用您要登录的服务器的名称调用脚本:
使用“login”以外的其他名称作为脚本名称,因为这是现有可执行文件的名称。
始终避免使用全部大写的变量名称,以防止可能与 shell 变量发生名称冲突。