今天帮朋友处理 Linode VPS IP 可以 ping 通,但是 SSH 无法连接的问题。此朋友的 Linode VPS 为 Fremont 机房,SSH 端口为 22。
我通过后台 Lish Web Console 进入网页 ssh 连接,修改了 SSH 的端口。再次 xshell 连接,依旧连接不上(后来找到原因应该是没有把新的 SSH 端口号加入防火墙端口白名单里)
于是 remove 掉,重新选了德国 Frankfurt 机房,配置系统选择 CentOs 6.8,启动之后 Xshell 连接,SSH 默认 22 端口,填入 root 和密码,连接,正常!
既然此时 22 端口 SSH 连接正常,趁着正常赶紧改 SSH 端口。
修改之前,使用以下命令,把配置文件做个备份。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
1、修改 SSH 配置
按照这个 /etc/ssh/sshd_config
路径,把 sshd_config 的文件下载下来,用 notepad++编辑打开。
默认我们可以看到有 22 端口,这里我们再添加一行 Port 自定义的端口。这里需要注意 22 的一行不直接删除,防止设置错误导致的无法登录。
即:
#Port 22
这一行把 # 去掉,然后再加一行要换用的端口号。随便任何 5 位端口数字(≤65536),比如:20028
最终为:
Port 22
Port 20028
保存。上传覆盖。
2、设置防火墙
注意:如果你是 CentOS 7 及以上版本,依次执行下面 4 行命令:
第二行命令在 sshd_config 中有提示:
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
semanage port -a -t ssh_port_t -p tcp 20028 firewall-cmd --permanent --zone=public --add-port=20028/tcp (如果防火墙服务没开,可能会提示你 FirewallD is not running。如果是这样,下面两条命令就不用输入了。) firewall-cmd --add-port 20028/tcp firewall-cmd --reload
如果碰到提示错误“-bash: semanage: command not found”,则先安装 semanage。依次执行:
yum provides semanage
yum install policycoreutils-python -y
执行完这两条命令(第 2 条安装会慢一点,耐心等待安装完毕),重新执行上面提到的 4 条命令。
如果你是 CentOS 6.x,执行下面的命令:
iptables -I INPUT -p tcp --dport 20028 --syn -j ACCEPT service iptables save semanage port -a -t ssh_port_t -p tcp 20028
3、重启 SSH 服务
注意:如果你是 CentOS 7 及以上版本,依次此重启命令:
systemctl restart sshd.service
如果你是 CentOS 6.x,执行下面的命令:
service sshd restart
4、查看已提交 SELinux 的 SSH 端口记录
重启之后,使用命令查看端口号:
semanage port -l | grep ssh
如果一切正常,应该显示:ssh_port_t tcp 20028, 22 两个端口。
5. 用新的端口号进行 SSH 连接
我们再次打开一个 Xshell 连接,把 xshell 里连接会话属性的 ssh 端口从 22 改成 20028,然后连接。
如果连接得通,重复步骤 1 一遍,把 Port 22 那行删除,然后保存,上传覆盖。
覆盖完后,重启 SSHD 服务。
6、查看目前系统开放的 SSH 端口
ss -tnlp | grep ssh
正常情况下,应该看到两条新端口号的记录。类似于:
LISTEN 0 128 *:20028 *:* users:(("sshd",pid=xxxx,fd=3))
LISTEN 0 128 :::20028 :::* users:(("sshd",pid=xxxx,fd=4))
这就说明目前 SSH 端口关闭了默认的 22 端口(避免了 N 多网络端口扫描工具的扫描),启用了新的 20028 端口。
OK,搞定。
经过上面这六个步骤,即可开始安心地控制 VPS 了。
本站所有文章除注明“转载”的文章之外,均为原创。未经本站允许,请勿随意转载或用作任何商业用途,否则依法追究侵权者法律责任的权利。
Sam 老师,按照您的建议,昨天刚把 SSH 端口号更改掉。不过刚开始按照上面指令操作的时候,发现有报错。新 Linode VPS 搭载的是 CentOS 9,具体错误信息如下:
如果碰到提示错误“-bash: semanage: command not found”,则先安装 semanage。依次执行:
yum provides semanage
yum install policycoreutils-python -y
第一步报错:(错误:yum install -y curl policycoreutils-python openssh-server)
网上参考其他的信息:产生这个错误的原因是未配置 yum 源,所以需要安装 EPEL 源
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
第二歩报错:出现 Error: Unable to find a match: policycoreutils-python
谷歌上找到的解释:How to fix Unable to find a match: policycoreutils-python on CentOS 8
The package policycoreutils-python is for CentOS 7 and can’t be installed on CentOS 8. It has been renamed to policycoreutils-python-utilson CentOS 8. Policycoreutils-python-utils package contains the management tools used to manage an SELinux environment. Below is the right yum command to install policycoreutils-python-utils on CentOS 8.
运行下面的指令就解决了:
yum install policycoreutils-python-utils
之后就可以正常运行这几条指令了:
semanage port -a -t ssh_port_t -p tcp 20028
firewall-cmd --permanent --zone=public --add-port=20028/tcp (如果防火墙服务没开,可能会提示你 FirewallD is not running。如果是这样,下面两条命令就不用输入了。)
firewall-cmd --add-port 20028/tcp
firewall-cmd --reload
我不太懂代码,如果上面有不对的地方,麻烦您及时删除这条评论,免得我不小心误导了其他人!
大多数攻击者会默认用 SSH 的默认 22 端口扫描和尝试撞库。Centos 的指令在 CentOS 7,8,9 版本中,有些指令都不太一样,所以需要谷歌找对应的指令。
我现在还在用 CentOS 7.9 版本,比较习惯和熟悉了。这个 CentOS 系统版本不需要太高,一般只要保证 PHP 版本别太低即可。
@料神Sam 好的,希望能帮到其他小伙伴!
我是新搭载的 VPS,所以想着用比较新的 CentOS 版本,心想这样可以保证可以兼容最新版本的 PHP。
记得料网之前有一篇 VPS 新手全教程的文章吧?后来好像找不到了,那篇教程对新手真的很有帮助。最开始我也是跟着一步一步做的,LNMP 安装完成之后还有点小成就感 之后就一直倾向于用 VPS 来搭建网站了
@小璞叔叔 第一步报错:(错误:yum install -y curl policycoreutils-python openssh-server)
网上参考其他的信息:产生这个错误的原因是未配置 yum 源,所以需要安装 EPEL 源
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
补充:这个按照军哥的解释,可以直接通过下面的命令直接进行安装 EPEL 源:
yum install epel-release
(自己非专业 IT,怕自己找的信息不准 导致有些小伙伴不能用。后来偶然在军哥教程文章里看到这部分,然后就赶紧来修正一下! )
第二步设置防火墙的时候按步骤操作显示: -bash: semanage: command not found
CentOS 6.8 系统.
第四步也是显示: -bash: semanage: command not found
步骤没错我检查几次了, 怎么处理?
@Luis 好像老大这个命令有点儿错误,我之前用 CentOS6.8 的时候,也折腾了半天。要不你换成 CentOS7 以上的吧,我刚弄命令是对的。
@Nana semanage port -a -t ssh_port_t -p tcp 20028 这个指令不对
@Nana 我已经成功修改了, 按照这个论坛军哥的方法 https://bbs.vpser.net/forum.php?mod=viewthread&tid=1748&highlight=ssh%2B%E7%AB%AF%E5%8F%A3
注意: 修改成功后输入 semanage port -l | grep ssh 依然会只显示 22 端口. 在 xshell 用 新端口能链接上.
该评论为私密评论
该评论为私密评论
@Liaosam 该评论为私密评论