工具

Linode SSH 无法连接的解决办法记录

料神Sam发布于 2018-09-18阅读 12399 次评论 12

今天帮朋友处理 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 了。

本站所有文章除注明“转载”的文章之外,均为原创。未经本站允许,请勿随意转载或用作任何商业用途,否则依法追究侵权者法律责任的权利。

分享到: 微信 新浪微博 QQ Qzone
料神Sam
识不足则多虑,威不足则多怒,信不足则多言。
SiteGround外贸建站主机优惠券

12条评论

发表我的评论

取消评论

邮箱白名单说明:最近料网自动提醒邮件经常会被一些邮件服务商拦截。为了您顺利并及时地收取留言被回复的提醒邮件,请在您邮箱中把料网 liaosam.com 加入白名单域名。

我不是机器人
设为私密评论
添加表情

Hi,您需要填写昵称和邮箱!

您的邮箱地址不会公开,仅仅用于收取回复。建议填写QQ邮箱,不宜填写工作邮箱。
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (没有就留空)
  • 问题验证:今年年份是?
呃,评论有点多哦.. 请稍等
  1. 小璞叔叔Chrome · Windows 10

    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

    我不太懂代码,如果上面有不对的地方,麻烦您及时删除这条评论,免得我不小心误导了其他人!

    2年前 (2023-02-21)
    安徽
    回复
    • 料神Sam 外贸综合症患者.Chrome · Windows 10
      @小璞叔叔 没事,留着这条评论吧,或许对其他人有用。是的,SSH 端口改掉就不会每次 SSH 连接时提示自从上次连接之后有多少次失败的连接尝试了,看着都担心。
      大多数攻击者会默认用 SSH 的默认 22 端口扫描和尝试撞库。Centos 的指令在 CentOS 7,8,9 版本中,有些指令都不太一样,所以需要谷歌找对应的指令。
      我现在还在用 CentOS 7.9 版本,比较习惯和熟悉了。这个 CentOS 系统版本不需要太高,一般只要保证 PHP 版本别太低即可。
      2年前 (2023-02-21)
      安徽
      回复
      • 小璞叔叔Chrome · Windows 10

        @料神Sam 好的,希望能帮到其他小伙伴! :wink:

        我是新搭载的 VPS,所以想着用比较新的 CentOS 版本,心想这样可以保证可以兼容最新版本的 PHP。

        记得料网之前有一篇 VPS 新手全教程的文章吧?后来好像找不到了,那篇教程对新手真的很有帮助。最开始我也是跟着一步一步做的,LNMP 安装完成之后还有点小成就感 :mrgreen: 之后就一直倾向于用 VPS 来搭建网站了

        2年前 (2023-02-21)
        安徽
        回复
    • 小璞叔叔Chrome · Windows 10

      @小璞叔叔 第一步报错:(错误: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,怕自己找的信息不准 导致有些小伙伴不能用。后来偶然在军哥教程文章里看到这部分,然后就赶紧来修正一下! :mrgreen:

      2年前 (2023-02-24)
      安徽
      回复
  2. LuisChrome · Windows 7

    第二步设置防火墙的时候按步骤操作显示: -bash: semanage: command not found
    CentOS 6.8 系统.

    第四步也是显示: -bash: semanage: command not found
    步骤没错我检查几次了, 怎么处理?

    5年前 (2020-04-13)
    广东
    回复
    • NanaChrome · Windows 10

      @Luis 好像老大这个命令有点儿错误,我之前用 CentOS6.8 的时候,也折腾了半天。要不你换成 CentOS7 以上的吧,我刚弄命令是对的。

      5年前 (2020-04-15)
      福建
      回复
  3. 朱丽叶Safari · Mac OS X

    该评论为私密评论

    6年前 (2018-09-20)
    陕西
    回复
  4. 朱丽叶Safari · Mac OS X

    该评论为私密评论

    6年前 (2018-09-20)
    陕西
    回复
    • Liaosam 外贸综合症患者.搜狗浏览器 · Windows 7
      @朱丽叶 机房选了法兰克福的也 xshell 链接不上吗?如果是,QQ 上联系我。
      6年前 (2018-09-20)
      美国
      回复
      • 朱丽叶Safari · Mac OS X

        @Liaosam 该评论为私密评论

        6年前 (2018-10-09)
        陕西
        回复