阅读 31 SEO

设置群晖 6.1 以及 6.2 使用证书免密登录

设置群晖 6.1 以及 6.2 使用证书免密登录

设置群晖 6.1 以及 6.2 使用证书免密登录

昨天重新整理了一遍家里的群晖系统的硬件,除了数据备份之外,从日志回收到通知告警再到上面跑的服务的更新,有机会可以详细写一遍。


折腾过程中, ssh 连接操作必不可少,但是群晖系统却没有设置 RSA KEY 免密码认证的地方,导致每次连接都要输入服务器密码,很是讨厌,而简单创建 authorized_keys 对于群晖不生效也很有意思(先按下不表)。


然后在网上进行了一顿搜索,不论是国外用户的博客还是官方论坛上的帖子,感觉都写的很繁琐,以及大量复制粘贴,甚至包含错误根本解决不了问题,故有了这篇文字。


目标硬件

本文旨在解决多数 DSM6.1.7-15284Update2 和 DSM6.2-23739Update2 的硬件不能免密登录的问题。


少部分硬件由于一直跟随系统增量升级,所以可能存在一定的问题,为此我对于以上版本的系统各进行了两次完整的配置测试,除了一台一直跟随增量升级到6.2的设备配置失败,其余设备都顺利解决问题。


完整结果:


[成功] 从 6.1 一路升级到 6.1.7 的设备,开启“家目录”功能。

[成功] 直接安装 6.1.7 的设备,未开启“家目录”功能。

[成功] 直接安装 6.2 的设备,,未开启“家目录”功能。

[失败] 从 6.0 一路升级到 6.2 的设备,开启“家目录”功能。

前置准备

和常规设置服务器 免密码登录 一样,我们要先生成 RSA KEY 秘钥一对, rsa-keygen-t rsa 命令应该可以帮助到你,如果还不会,可以自行搜索相关资料,这里建议对于不同的设备生产不同的秘钥并妥善保存。


然后建议在你的 ~/.ssh/config 配置文件中对要进行登录的设备进行单独的显式声明,避免因为 DNS 或者 hosts 记录而干扰到 ssh 登录操作。


如果你想始终使用 ssh orange.home.com 来登录硬件设备,可以这么写:


 

# 新群晖

Host orange.home.com

User soulteary

Hostname 10.11.12.81

Port 55555

IdentityFile ~/.ssh/keys/litchi/litchi-2018

ControlPath ~/.ssh/home-orange-%r@%h:%p

ControlPersist yes

TCPKeepAlive yes

Compression yes

ForwardAgent yes

当然,如果你的配置特别多,还可以使用 Include 指令进行配置拆分,这个不在本篇内容话题之中,有兴趣可以自行查阅。


修正问题环境

群晖默认不能够简单配置 authorized_keys 达成免密登录的主要原因有两个:


home 目录以及 home/$USER 目录、 authorized_keys 文件缺失或者相应权限设置不正确。

因为 sshd_config配置错误,导致 sshd 服务重载配置失败。

为此我们要先登录设备,修正问题目录环境。


 

ssh orange.home.com

执行登录设备命令,会根据你之前是否信任设备提示下面的信息,如果你已经成功登录过设备,或者没有进行一些特殊的配置,下面的信息将不会再次出现。


 

The authenticity of host '[10.11.12.81]:55555 ([10.11.12.81]:55555)' can't be established.

ECDSA key fingerprint is SHA256:SKMgwJJSfwcEOY8Z8yXD889ru9lPLbQ1km1Xs65sH1Y.

Are you sure you want to continue connecting (yes/no)?

如果你没有开启了群晖的“家目录”功能(如非必要也不必开启,当然开启也无所谓)。 当你输入 yes 回车之后,则会看到下面的警告信息。


 

Warning: Permanently added '[10.11.12.81]:55555' (ECDSA) to the list of known hosts.

soulteary@10.11.12.81's password:

Could not chdir to home directory /var/services/homes/soulteary: No such file or directory

既然如此,我们就手工创建出来这个目录(也可以修改 /etc/passwd 中的 $home 目录)。


 

sudo mkdir -p /var/services/homes/$USER/.ssh

sudo chown -R $USER:users /var/services/homes/$USER/

sudo chmod 755 /var/services/homes/

chmod 700 /var/services/homes/$USER/.ssh

touch /var/services/homes/$USER/.ssh/authorized_keys

chmod 644 /var/services/homes/$USER/.ssh/authorized_keys

当你执行完毕上述命令, CTRL+D 登出设备,来将之前准备好的 RSA KEY 注入设备。


同步登陆证书

同步证书一般有两个方案,一个是使用 ssh-copy-id 命令,简单快捷,不过这里我选择的是另外一个方案,通过 ssh 执行远程设备上的 cat 命令配合管道符向设备中我们刚刚创建好的 authorized_keys 文件中追加内容。


 

ssh orange.home.com "cat >> ~/.ssh/authorized_keys" < ~/.ssh/keys/litchi/litchi-2018.pub

是不是比 ssh-copy-id soulteary@orange.home.com 更加直观了呢。


验证配置完成

再次执行登录操作。


 

ssh orange.home.com

这个时候你可能出现两个状况:


直接登录进了设备。

需要你输入配置密码。

如果是第一种情况,恭喜你,你基本已经操作完毕,可以跳到下一节内容了。


如果是第二种情况,输入密码登录到设备后,我们需要手动重启 sshd 服务,尝试让它重载默认配置,以及读取我们的免密登录的配置文件内容。


这里同样有两个方案:


群晖系统提供的 sudo synoservicectl--restart sshd ,或者手动进行进程的灭杀,因为系统配置了进程守护,所以依赖进程重新自启动来完成配置重载。


ps-ef|grep/usr/bin/sshd|awk{'print$2'}|xargs-I{}sudo kill-9{}


这里我选择了第二种,因为第一种在使用的过程中,概率性失灵,ORZ。


执行完毕,你会收到下面的提示信息,并被踢出设备登录。


 

soulteary@Orange:/$ Connection to 10.11.12.81 closed by remote host.

Connection to 10.11.12.81 closed.

好了,接下来就是第二次验证了。


再次验证设备

再次执行登录操作。


 

ssh orange.home.com

这个时候你还是可能出现两个状况:


直接登录进了设备。

需要你输入配置密码,或者提示无法进行登录。

如果是第一种,那么我们已经正式配置完毕,接下来可以进行简单的系统安全加固。 如果是第二种,请查看下一节内容。


我们先默认你已经完全配置成功,需要一些额外的系统加固。


虽然在内网,但是一样需要提防一些恶意软件进行密码穷举式的内网渗透,既然已经可以使用证书登录设备,那么我们要关闭 允许root用户使用ssh登录设备 和 允许使用账号密码进行设备登录 两个配置。


登录设备,执行下面两句命令即可。


 

sudo sed -ie 's/#\?PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

sudo sed -ie 's/#\?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

至此,如果你一切顺利的话,免密登录的操作就大功告成了。


调试配置中的错误

如果上一步操作中,你的设备禁止你使用 ssh 进行设备登录,那么很大的概率是你的 sshd_config 配置文件有错误,导致你的 sshd 服务不能正确启动,解决方案有两个:


在群晖中开启 telnet 服务,使用 telnet orange.lab.com 命令登录你的设备,然后修正你的配置,让 sshd 服务能够重启启动(如果免密登录 RSA 证书丢失,也可以用这个方法重置 sshd 配置,或者更新免密证书内容)。

在群晖中先关闭 ssh 登录选项,然后重新开启允许 ssh 登录选项,让系统能够正确的启动起来 sshd 服务(使用 synoservicectl 重启服务,概率遇到服务不能启动的问题)。

如果你确定你的 sshd_config 配置有问题,可以尝试使用 sudo/bin/sshd-d 命令以调试模式启动 sshd 命令,查看启动过程存在的问题。


如果你的用户始终不能登录,还可以查看 /etc/passwd 文件中的配置,确定你的用户后面跟随的 shell 的内容为 /bin/sh 或者 /bin/ash 之一。


最后

免密登录本来是很简单的事情,但是因为群晖本身的黑盒环境(恢复部分用户修改的文件内容),以及不确定的增量升级补丁(不确定补丁了哪些文件),导致了本篇洋洋洒洒写了这么多。


许多地方我提供了两个方案,除了能应用在群晖外,也能在老版本的客户端和老版本的 Linux 服务器的配置中使用。


希望这些能够帮助到有同样问题的你。

————————————————

版权声明:本文为CSDN博主「soulteary」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/soulteary/article/details/96330151


文章分类
后端
文章标签
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 gxwowoo@163.com 举报,一经查实,本站将立刻删除。
相关推荐