CentOS7 自定义 SSH 端口

前言

  众所周知,SSH 用的默认是 22 端口。因为每台机子的端口都是一样的,黑客扫一个 IP 段的 22 端口就能扫出不少机子。虽然我自己的服务器禁止了密码登录,但是被爆破也不是好玩的事情,所以我决定更改 SSH 端口。

那么问题来了

  我以前没用过CentOS,一直用的是 Debian/Ubuntu,改端口只需要改一下配置文件就行。

sudo vim /etc/ssh/sshd_config

  去掉了 Port 前面的 # 号,把 22 改成了 1234,然后 service sshd restart。

于是问题又来了

netstat -antlp |grep 1234 

  发现居然没在监听 1234 端口,查看状态

service sshd status

  sshd 居然炸了,大概是这么个输出:

sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Thu 2016-05-05 03:30:48 UTC; 2s ago
  Process: 10938 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
  Process: 10944 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=255)
 Main PID: 10944 (code=exited, status=255)
 
May 05 03:30:48 ixnetwork-uk1 systemd[1]: sshd.service: main process exited, code=exited, status=255/n/a
May 05 03:30:48 ixnetwork-uk1 systemd[1]: Unit sshd.service entered failed state.

  再看看日志(CentOS 的日志不是 syslog 而是 secure)

# tail /var/log/secure:
May  5 03:46:12 localhost sshd[11016]: error: Bind to port 1234 on 0.0.0.0 failed: Permission denied.
May  5 03:46:12 localhost sshd[11016]: error: Bind to port 1234 on :: failed: Permission denied.
May  5 03:46:12 localhost sshd[11016]: fatal: Cannot bind any address.

  什么鬼??我明明用的是 root 怎么会提示权限不够?

解决方法

  于是谷歌了一下,发现 CentOS 还有另外一层保护,就是 SELinux。
  执行一下

semanage port -l | grep ssh

  就会发现 ssh 只允许监听 22。
  好咯,那我就把 1234 添加进列表里面:

semanage port -a -t ssh_port_t -p tcp 1234

  再重启 sshd

service sshd restart

   看一下 status:

# service sshd status
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Thu 2016-05-05 03:54:09 UTC; 7s ago
  Process: 10938 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
 Main PID: 11076 (sshd)
   CGroup: /system.slice/sshd.service
           └─11076 /usr/sbin/sshd -D
 
May 05 03:54:09 ixnetwork-uk1 systemd[1]: Started OpenSSH server daemon.
May 05 03:54:09 ixnetwork-uk1 sshd[11076]: Server listening on 0.0.0.0 port 1234.
May 05 03:54:09 ixnetwork-uk1 sshd[11076]: Server listening on :: port 1234.

  好了现在正常了。

附录:
  1、问题: semanage command not found.
  解决: yum install policycoreutils-python
  2、问题: 如何确定 semanage 是哪个程序包提供的?
  解决: yum provides semanage
  3、问题: 为什么我直接 service sshd restart 没有问题?
  解决: 因为你系统禁用了 SELinux.


参考来源:
1、解决CentOS更改ssh端口后报错的问题
2、semanage command not found on CentOS 7 and RHEL 7


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 ssh端口centos 的文章

 本文最后更新于 2017/03/31 13:58:01,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 系统 > CentOS7 自定义 SSH 端口

精选评论

  1. riant

    奇怪了,firewall 相关端口开启了,sshd 配置文件也添加 port 行,重启了,semanage 的 ssh 端口也给添加了,使用新端口连接时依然 timeout。可还有其他可能有问题的地方吗?

    谢谢。

    1. VirCloud

      需确认,没有其他防火墙阻挡,例如华为云,在控制面板上还有一层防火墙,在这里也要允许通过,但是如果修改前的 22 端口就已经 timeout,那只能考虑更换 IP 了。

      1. 欧文斯

        SELinux 开启了也会影响,可以使用 setenforce 0 命令临时关闭来排查。