当我们想在外网通过ssh协议访问家里的群晖时,我们只需要在路由器中对群晖的ssh端口做好端口映射即可。如果我们想进一步提高ssh访问的安全,可以采取以下措施(以下方法是我想到的,可能并不全面):

  • 控制面板中禁用默认的admin账号,另外新建一个用户并赋予管理员权限(强烈建议)
  • 做端口映射时将外网的端口设置为一个不常用的高位端口号(强烈建议不要使用默认的22端口)
  • 将ssh从密码登录改为密钥登录
  • 在路由器中对ssh外网映射的端口做防火墙白名单访问设置

以上4种操作的必要性是从强到弱的,每个操作相互之间并不冲突,最安全的自然是4个安全措施全部都设置,我的建议是至少设置前两个,第三个建议设置,最后一个在实际操作过程时会觉得不方便,觉得没必要的话可以不设置。

前面两个操作的设置还是比较简单的,在这里就不再赘述了,这里具体讲下第三个操作在群晖中的设置方法(大致和linux服务器的操作相同):

1、 创建密钥对

  • 如果是windows系统,可以使用putty工具PuTTYgen来生成密钥,具体生成的方法可以自行查找下
  • 如果是类linux系统(购买的linux服务器 or 类ubuntu的桌面系统 or MacOS or 树莓派 or 群晖等等),都可以参照如下的命令来生成
# xxxx可以随意命名,只是对这个密钥对给个名称,当群晖上有多个密钥对时可以通过这个名称区分密钥对的用途
# 如果是想直接在群晖上生成,需先ssh进入群晖
ssh-keygen -t rsa -C "xxxx"

生成的过程中会提示保存的文件地址和名称,如果想使用默认的直接回车即可,如果之前有生成过且和默认的名称相同则可以指定一个新的文件名。
生成时还会提示是否要设置密码,如果嫌麻烦可以不设置,但如果设置了的话,以后ssh密钥登录时都需要输入这个密码才能登录成功。
生成成功后会在.ssh目录下看到多出两个公私钥文件,如果是使用的默认名称则是id_rsa和id_rsa.pub。

2、 将生成的公钥复制到群晖中

可以使用如下两种方法将公钥(id_rsa.pub)复制到群晖中:

  • 手动复制公钥中的内容到群晖的~/.ssh/authorized_keys文件中(使用PuTTYgen工具/群晖生成的需要使用此方法)
# ssh登录到群晖
cd ~/.ssh
# 编辑authorized_keys文件并把公钥内容拷贝进去,如果authorized_keys文件不存在则手动创建一个
touch authorized_keys
  • 使用ssh-copy-id命令(使用类linux系统生成的密钥可以使用此方法),这个命令可以直接将公钥中的内容拷贝到~/.ssh/authorized_keys中,无需再手动进行操作了。
ssh-copy-id -i .ssh/id_rsa.pub  你群晖的用户名@你群晖的IP地址

3、 修改文件权限

在群晖上需确认如下文件/目录的权限,如果不是正确的请修改,否则可能会无法成功使用密钥登录。

# xxxx对应的是你登录群晖的用户名,群晖的用户目录权限默认为 777,必须要修改为755才能免密登录
chmod 755 /var/services/homes/xxxx
# 修改authorized_keys文件的权限
chmod 600 ~/.ssh/authorized_keys
# 修改.ssh目录的权限
chmod 700 ~/.ssh

如果前面是使用ssh-copy-id复制公钥的,那么~/.ssh/authorized_keys文件的权限应该是已经设置正确的了,这里就不用再重复设置了。

4、 修改sshd配置文件

最后需要在群晖的sshd配置文件中设置启用密钥登录

# 编辑sshd配置文件
sudo vim /etc/ssh/sshd_config
# 确认配置文件中如下三项的配置是否相同,不同的话则手动添加或修改
PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

设置完成保存退出即可,此时再重启下群晖的sshd服务即可使用密钥登录了(建议通过控制面板的关闭ssh-启用ssh来操作,直接在ssh中命令操作重启可能会没有效果)

5、 客户端如何使用密钥登录

  • 直接使用命令行登录
# 首先需要将之前生成的私钥放到~/.ssh目录下,并修改权限为600(私钥文件名称做了修改的需要相应修改下面的命令)
chmod 600 ~/.ssh/id_rsa
# ssh密钥登录,如果端口不是默认的22则需要加上-p指定端口号
ssh -p xxx -i ~/.ssh/id_rsa 你群晖的用户名@你群晖的IP地址
  • 使用客户端登录
    如果是使用类似termius、putty、xshell之类的客户端,则需要在客户端中指定私钥文件或复制私钥的内容即可,具体每个客户端的操作略有不同,可以自行查找下具体的操作步骤。

PS:

  1. 如果是直接使用群晖生成的公私钥,建议在生成后另外存储私钥,并将群晖中的私钥文件删除。公钥文件在复制到~/.ssh/authorized_keys中后也可以删除。
  2. 第4步设置完成后建议先不要直接退出群晖的ssh会话,在ssh仍然登录的情况下验证客户端使用密钥登录是否成功,此时如果是因为某些设置不对导致无法登录的话还可以在之前登录的界面中补救修改。如果真遇到退出了且无法ssh登录成功的,可以在控制面板开启ssh功能的界面处开启telnet,并使用telnet来登录群晖。
telnet 你群晖的内网IP地址



版权声明:本文为原创文章,版权归 nicolaszf 所有,转载请注明出处!

本文链接:https://blog.sourismu.me/archives/95/