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

本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2018年07月20日 统计字数: 2335字 阅读时间: 5分钟阅读 本文链接: https://soulteary.com/2018/07/20/synology-passwordless-ssh.html


设置群晖 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 来登录硬件设备,可以这么写:

 
  1. # 新群晖
  2. Host orange.home.com
  3. User soulteary
  4. Hostname 10.11.12.81
  5. Port 55555
  6. IdentityFile ~/.ssh/keys/litchi/litchi-2018
  7. ControlPath ~/.ssh/home-orange-%r@%h:%p
  8. ControlPersist yes
  9. TCPKeepAlive yes
  10. Compression yes
  11. ForwardAgent yes

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

修正问题环境

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

  1. home 目录以及 home/$USER 目录、 authorized_keys 文件缺失或者相应权限设置不正确。
  2. 因为 sshd_config配置错误,导致 sshd 服务重载配置失败。

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

 
  1. ssh orange.home.com

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

 
  1. The authenticity of host '[10.11.12.81]:55555 ([10.11.12.81]:55555)' can't be established.
  2. ECDSA key fingerprint is SHA256:SKMgwJJSfwcEOY8Z8yXD889ru9lPLbQ1km1Xs65sH1Y.
  3. Are you sure you want to continue connecting (yes/no)?

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

 
  1. Warning: Permanently added '[10.11.12.81]:55555' (ECDSA) to the list of known hosts.
  2. soulteary@10.11.12.81's password:
  3. Could not chdir to home directory /var/services/homes/soulteary: No such file or directory

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

 
  1. sudo mkdir -p /var/services/homes/$USER/.ssh
  2. sudo chown -R $USER:users /var/services/homes/$USER/
  3. sudo chmod 755 /var/services/homes/
  4. chmod 700 /var/services/homes/$USER/.ssh
  5. touch /var/services/homes/$USER/.ssh/authorized_keys
  6. chmod 644 /var/services/homes/$USER/.ssh/authorized_keys

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

同步登陆证书

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

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

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

验证配置完成

再次执行登录操作。

 
  1. ssh orange.home.com

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

  1. 直接登录进了设备。
  2. 需要你输入配置密码。

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

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

这里同样有两个方案:

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

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

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

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

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

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

再次验证设备

再次执行登录操作。

 
  1. ssh orange.home.com

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

  1. 直接登录进了设备。
  2. 需要你输入配置密码,或者提示无法进行登录。

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

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

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

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

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

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

调试配置中的错误

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

  1. 在群晖中开启 telnet 服务,使用 telnet orange.lab.com 命令登录你的设备,然后修正你的配置,让 sshd 服务能够重启启动(如果免密登录 RSA 证书丢失,也可以用这个方法重置 sshd 配置,或者更新免密证书内容)。
  2. 在群晖中先关闭 ssh 登录选项,然后重新开启允许 ssh 登录选项,让系统能够正确的启动起来 sshd 服务(使用 synoservicectl 重启服务,概率遇到服务不能启动的问题)。

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

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

最后

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

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

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

--EOF

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值