SSH 远程服务器连接服务

Summary: Author: 张亚飞 | 阅读时间: 3 minute read | Published: 2016-04-22
Filed under Categories: LinuxTags: SSH,


CentOS SSH 启动失败:

一次在 CentOS 安装 Docker 后重启服务器出现连不上的问题,使用服务器提供的终端登录显示如下错误:

  • 使用命令 lsof -i:22312 的时候发现居然没在监听 22312 端口
Sun Nov 11 04:49:38 coam@v.cs.0:~$ sudo lsof -i:22312
  • 查看系统日志:
Sun Nov 11 04:47:49 coam@v.cs.0:~$ sudo journalctl -u sshd -f
error: Bind to port 22312 on 0.0.0.0 failed: Permission denied.
localhost sshd[11016]: error: Bind to port 22312 on :: failed: Permission denied.
localhost sshd[11016]: fatal: Cannot bind any address.

CentOS还有另外一层保护,就是 SELinux.执行一下 semanage port -l | grep ssh 就会发现 ssh 只允许监听 22

Sun Nov 11 04:48:03 coam@v.cs.0:~$ sudo semanage port -l | grep ssh
ssh_port_t                     tcp      22

那我就把 22312 添加进列表里面:

semanage port -a -t ssh_port_t -p tcp 22312
  • 最后重启 sshd 服务便解决问题
service sshd restart

CentOS 因为 SELinux 的问题导致 SSH 连接需要密码

一次在 CentOS 安装 Docker 后,通过 ssh 连接需要密码的问题:

  • 首先看远处服务端的 用户目录 ~/.ssh ~/.ssh/authorized_keys 权限:
Sun Nov 11 06:09:07 coam@v.cs.0:~/.ssh$ ll
drwxr-xr-x.  2 coam coam 4096 Jun 16 14:40 ./
drwxr-xr-x. 23 coam coam 4096 Nov 11 05:57 ../
-rwxr-xr-x.  1 coam coam 1203 Nov 11 05:04 authorized_keys*
-rw-------.  1 coam coam   57 Apr 17  2018 config
-rw-------.  1 coam coam 1679 Apr 17  2018 id_rsa
-rw-r--r--.  1 coam coam  391 Apr 17  2018 id_rsa.pub
-rw-r--r--.  1 coam coam  204 Apr 17  2018 known_hosts

显示权限没毛病

  • 重新在客户端上传 ~/.ssh/id_rsa.pub 公钥
ssh-copy-id coam@8.9.3.182 -p22312

重新连接后仍提示需要密码

  • 使用调试模式连接远处服务端
ssh coam@8.9.3.182 -p22312 -v
  • 在远程服务端关闭 sshd.service 并手动启动添加参数 -d 开启调试模式:
sudo systemctl stop sshd
sudo /usr/sbin/sshd -d
...

发现手动启动是可以连接成功的.怀疑是启动方式有问题

  • 修改 sshd 启动脚本 /usr/lib/systemd/system/sshd.service 并改为调试模式重启运行:
#ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecStart=/usr/sbin/sshd -d $OPTIONS

使用 systemctl 模式启动运行并打印服务日志

sudo systemctl daemon-reload
sudo systemctl restart sshd

提示如下错误:

Nov 11 05:58:19 v.cs.0 sshd[5604]: debug1: trying public key file /data/home/coam/.ssh/authorized_keys
Nov 11 05:58:19 v.cs.0 sshd[5604]: debug1: Could not open authorized keys '/data/home/coam/.ssh/authorized_keys': Permission denied

显然 systemctl 模式启动有权限问题.

  • 最后 Google 找到答案,原来是 SELinux 有问题

方案一: 关闭 SELinux

sudo setenforce 0
getenforce
Permissive

方案二: 设置 SELinux 参数

sudo setsebool -P use_nfs_home_dirs=1
sudo setenforce 1
getenforce
Enforcing

问题在于 SELinux 阻止 sshd 打开文件.如果是 CentOS.6 执行:restorecon -FRvv ~/.ssh, 解决问题.

  • 但在 CentOS.7 上以上方法不管用

该问题本质应该是 authorized_keys 文件的 context 不正确,正常情况下应该是 ssh_home_t,如果是 admin_home_t 则是错误的.可以使用 estorecon 命令进行恢复.

  1. 首先通过命令 ls -alZ .ssh/ 查看 ~/.ssh/ 目录权属配置
Sun Nov 11 06:49:11 coam@v.cs.0:~$ ls -alZ .ssh/
drwxr-xr-x. coam coam system_u:object_r:default_t:s0   .
drwxr-xr-x. coam coam system_u:object_r:default_t:s0   ..
-rwxr-xr-x. coam coam system_u:object_r:default_t:s0   authorized_keys
-rw-------. coam coam system_u:object_r:default_t:s0   config
-rw-------. coam coam system_u:object_r:default_t:s0   id_rsa
-rw-r--r--. coam coam system_u:object_r:default_t:s0   id_rsa.pub
-rw-r--r--. coam coam system_u:object_r:default_t:s0   known_hosts
  1. 使用命令 chcon -Rv -t ssh_home_t ~/.ssh 修改文件的默认 SELinux 属性配置
Sun Nov 11 06:49:25 coam@v.cs.0:~$ chcon -Rv -t ssh_home_t ~/.ssh
changing security context of ‘/data/home/coam/.ssh/config’
changing security context of ‘/data/home/coam/.ssh/id_rsa.pub’
changing security context of ‘/data/home/coam/.ssh/known_hosts’
changing security context of ‘/data/home/coam/.ssh/id_rsa’
changing security context of ‘/data/home/coam/.ssh/authorized_keys’
changing security context of ‘/data/home/coam/.ssh’
  1. 再次通过命令 ls -alZ .ssh/ 查看 ~/.ssh/ 目录权属配置
Sun Nov 11 06:49:43 coam@v.cs.0:~$ ls -alZ .ssh/
drwxr-xr-x. coam coam system_u:object_r:ssh_home_t:s0  .
drwxr-xr-x. coam coam system_u:object_r:default_t:s0   ..
-rwxr-xr-x. coam coam system_u:object_r:ssh_home_t:s0  authorized_keys
-rw-------. coam coam system_u:object_r:ssh_home_t:s0  config
-rw-------. coam coam system_u:object_r:ssh_home_t:s0  id_rsa
-rw-r--r--. coam coam system_u:object_r:ssh_home_t:s0  id_rsa.pub
-rw-r--r--. coam coam system_u:object_r:ssh_home_t:s0  known_hosts

重新 ssh 登录连接,解决问题.


SELinux 属性相关

  • 查看文件的 SELinux 属性
Sun Nov 11 13:45:16 coam@v.cs.1:/data$ ls -alZ .
drwxr-xr-x. root   root   system_u:object_r:unlabeled_t:s0 .
dr-xr-xr-x. root   root   system_u:object_r:root_t:s0      ..
drwxr-xr-x. root   root   unconfined_u:object_r:unlabeled_t:s0 home
drwxrwxrwx. coam coam unconfined_u:object_r:unlabeled_t:s0 opt
  • 恢复修改过的 SELinux 属性为默认属性,将 unconfined_u 改为 system_u
Sun Nov 11 13:49:39 coam@v.cs.1:/data$ restorecon -F -v *
restorecon reset /data/home context unconfined_u:object_r:unlabeled_t:s0->system_u:object_r:default_t:s0
restorecon reset /data/home context unconfined_u:object_r:unlabeled_t:s0->system_u:object_r:default_t:s0
restorecon reset /opt/data context unconfined_u:object_r:unlabeled_t:s0->system_u:object_r:default_t:s0

使用参数 restorecon -FRvv .,将 unconfined_u 改为 system_u,将 unlabeled_t 改为 default_t,不建议带 -R 参数.

  • 再次查看 SELinux 属性配置
Sun Nov 11 13:50:20 coam@v.cs.1:/data$ ls -alZ .
drwxr-xr-x. root   root   system_u:object_r:unlabeled_t:s0 .
dr-xr-xr-x. root   root   system_u:object_r:root_t:s0      ..
drwxr-xr-x. root   root   system_u:object_r:default_t:s0   home
drwxrwxrwx. coam coam system_u:object_r:default_t:s0   opt

Comments

Cor-Ethan, the beverage → www.iirii.com