问题描述
在使用SSH连接过程中,突然出现连接不成功(以前都可以连接,但突然不能连接了),并且出现如下提示:ssh_exchange_identification: read: Connection reset
或者ssh: connect to host port 22: Connection refused
解决办法
需要考虑是否因为密码输入错误的次数过多,导致Linux系统禁止了你的IP地址访问。
可以查看/etc/hosts.deny
文件中是否出现了你的IP地址。
如果的却是Linux系统禁止了你的IP地址访问,仅仅在/etc/hosts.deny
中删除IP是没有用的,也需要在/var/lib/denyhosts
目录下的如下文件中进一步删除被禁IP。1
2
3
4
5
6
7/var/lib/denyhosts/hosts
/var/lib/denyhosts/hosts-restricted
/var/lib/denyhosts/hosts-root
/var/lib/denyhosts/hosts-valid
/var/lib/denyhosts/users-hosts
/var/lib/denyhosts/users-invalid
/var/lib/denyhosts/users-valid
可以通过如下命令删除文件中的被禁IP地址sed -i "/IP地址/d" /文件
通过运行Shell脚本以删除所有文件中的被禁IP,然后通过如下命令检查iptables
iptables -nvL | grep [IP地址]
Shell脚本
新建一个名为unblock_ip.sh
的Shell脚本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54#!/bin/bash
function unblock_ip() {
# 参数1:ip地址
# 定义需要处理的文件的数组
declare -a filesList=(
"/etc/hosts.deny"
"/var/lib/denyhosts/hosts"
"/var/lib/denyhosts/hosts-restricted"
"/var/lib/denyhosts/hosts-root"
"/var/lib/denyhosts/hosts-valid"
"/var/lib/denyhosts/users-hosts"
"/var/lib/denyhosts/users-invalid"
"/var/lib/denyhosts/users-valid"
)
# 停止DenyHosts服务
echo "DenyHosts Service Stop"
service denyhosts stop
# 清理iptables的规则 (应先用 iptables --list 查看一下已有规则)
# iptables -F
# 清理每个文件中的 ip 地址
for i in ${!filesList[*]};
do
echo "----------------------------------------------------";
echo "UNBLOCK IP: $OPTARG in ${filesList[$i]}";
# echo "/$OPTARG/d"
sed -i "/$OPTARG/d" ${filesList[$i]}
echo "UNBLOCK SUCCESS IN ${filesList[$i]}";
done
iptables -D INPUT -s $OPTARG -j DROP
# 启动DenyHosts服务
echo "DenyHosts Service Start"
service denyhosts start
}
# 通过 getopts 获取需要处理的 ip 地址参数
getopts "i:" ip
if [ -n "$OPTARG" ];then
if [[ $OPTARG =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];then
echo "Need To Block IP: $OPTARG"
unblock_ip $OPTARG
else
echo "IP is not valid"
fi
else
echo "IP is empty"
fi
在Linux系统中运行如下命令sudo bash unblock_ip.sh -i [IP地址]
附录
一些常用命令
查看 iptalbes 的规则 iptables --list 查看 ssh 状态 service ssh status 重启 ssh service ssh restart /etc/host.allow 和 /etc/hosts.deny 存储允许和禁止的ip。