群晖SSH免密登录
在这里分享一下群晖开启ssh后,把公钥传输到机器上面,然后依旧无法免密登录的解决方法。
我的情况是这样的,很奇怪,在 iterm 中即使已经把公钥上传到群晖的家目录中的 .ssh 文件夹中了,但是还是会让我输入密码。然后如果此时保持有一个窗口已经登录服务器,第二个窗口就可以直接登录,不需要输入密码。这里并没有深究是iterm自带的功能,还是群晖服务器的问题。 反正第一次无法正常免密登录,那肯定可以判断是群晖的问题。
SSH 调试方法
在服务器上面开一个一次性的临时的ssh服务,这个服务职能被连接一次。端口随便设置个端口,不要与其他端口冲突就行,-d 开启debug 模式。
which sshd
使用这个命令先查看 sshd 的绝对路径,我的是 /bin/sshdsudo /bin/sshd -p 2234
我的ssh端口是2233, 所以我开一个临时的,没有被占用的端口就随便选了 2234 。 我这里是有公网ip的,然后通过 ddns ,然后设置端口转发,最后使用域名来代替 ip 来连接。关于端口转发,及公网ip、ddns 不在叙述。通过第一步开启临时服务后,在本机新打开一个终端,通过 ssh -vvv -p 2234 xxx.xxx.com 来进行连接。
然后观察服务器打印出来的日志,我这里发现这个错误:
1
2ssh receive packet: type 51
Authentication refused: bad ownership or modes for directory直接查看日志是否有否定的词语,就可以知道大概是哪里有问题了。
然后发生这个问题主要是因为目录权限设置的问题。我这里改了下权限设置就可以了。
sshd 为了安全,对属主目录和文件权限有所要求,如果权限不对,则ssh的免密登录不生效。
用户目录权限为 775 或者 700,不能是77x。
修改命令:
chmod 700
/homes/myhome (myhome为你的目录名).ssh 目录权限一般为 755 或者 700。
修改命令:
chmod 700 /homes/myhome/.ssh
rse_id.pub 和 authorized_keys 权限一般为 644,我这里没放rse_id.pub,这放了一个authorized_keys,公钥放在 authorized_keys 里面,所以只需要修改这个文件就行了。
chmod 644 /homes/myhome/.ssh/authorized_keys
如果你的服务器上面有私钥文件,最好也修改一下,没有的话就不用了。私钥文件权限必须为600
chmod 600 rsa_id
最后再说一个 rsync
如果开启免密后,需要使用 rsync 来进行同步操作,请先把群晖的 rsync 服务开启。
在控制面板—> 文件服务–> rsync —> 启用 rsync服务,然后应用就可以了。
过了一天更新
昨天设置完成了 ssh 免密登录,配合使用 rsync 传输博客静态文件很爽。 但是晚上却发现 moments 里面的照片全部显示不出来的,不仅缩略图不显示,就算点进去也不显示。我下载下来,发现图片是完好的。 几经周折发现是因为 我安装 moments 的这个账户目录必须有 everyone 群组权限,我加上 everyone 群组权限后,moments 正常了。 但是 ssh 又无法免密登录了,因为加上 everyone 群组后, 家目录就变成 777 权限了。
为了解决这个问题,并且处于安全考虑, 创建一个新的用户,专门用来存放博客文件。
并且密码设置成随机密码,这样只能通过 公私钥进行登录,这样安全性就提高了很多,并且也不需要为因为其他软件权限问题而考虑。