You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

限制仅特定国家IP访问SSH的配置问题:执行过滤脚本时提示/usr/share/GeoIP是目录错误

限制仅特定国家IP访问SSH的配置问题:执行过滤脚本时提示/usr/share/GeoIP是目录错误

看起来你遇到的核心问题是脚本里调用的GeoIP查询路径写错啦!咱们一步步来修正这个问题:

1. 修正脚本中的IP查询命令

你脚本里写的/usr/share/GeoIP是GeoIP数据库的存放目录,并不是可执行命令。你应该用geoip-bin包提供的geoiplookup工具来做IP查询。

把脚本里的这一行:

COUNTRY=`/usr/share/GeoIP $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`

替换成:

COUNTRY=$(geoiplookup $1 | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1)

这里顺便提一句,用$(...)替代反引号来执行命令是更现代、可读性更好的写法,推荐使用。

2. 修正脚本权限的小错误

你设置权限时写的chmod +X filter.sh里的大写X是个小问题,应该改成小写的x:

chmod +x /usr/local/bin/filter.sh

大写X只会给目录或本身已有执行权限的文件加权限,小写x才是给普通脚本文件添加执行权限的正确方式。

3. 验证脚本功能

修改完成后,先单独测试脚本是否能正常工作:

bash /usr/local/bin/filter.sh 8.8.8.8

你可以替换成任意测试IP,比如沙特的IP,看看脚本是否能正确识别国家代码,并返回对应的允许/拒绝状态(返回0表示允许,1表示拒绝)。

另外,你也可以先单独运行geoiplookup 你的测试IP,确认工具本身能正常返回国家信息,比如类似这样的输出:

GeoIP Country Edition: US, United States

如果这一步有问题,可能需要重新安装geoip-bin或geoip-database包。

4. 确认hosts配置的有效性

当脚本正常工作后,记得重启一下sshd服务(比如systemctl restart sshd),确保hosts.allow和hosts.deny的配置生效。

备注:内容来源于stack exchange,提问作者ibraheem mohsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:27:35