Group Server Maintenance Handbook
Tutorial, by Yifeng Xie, 2024
服务器管理员手册
第一章:SSH连接
0.相关历史
2024.10.10时,zhang02和zhang03两台服务器先后遭到恶意入侵,并恶意篡改了系统文件,植入了挖矿病毒。而原因分析在于之前设置的ssh密码登陆中,存在一个用户的密码过于简单,并且即使是强密码也有被暴力破解的可能。因此在2024.10.14完成系统重装与病毒清理后,我们调整ssh远程连接方式为ssh私钥公钥配对连接,这可以大幅提升服务器的安全性。
1.密钥对的生成
工作说明:密钥对的生成通常是管理员指导组员完成
主流的ssh登陆方式有两种,一种是ssh密码登陆,一种是ssh公私钥配对登陆。第二种登陆方式不仅通过免密的方式增加了便捷性,更因为私钥的独有性大幅提升了安全性。
1.1 生成方式
下列操作将在 用户目录下.ssh文件夹 下生成一个名为 id_rsa 的密钥对,即 ~/.ssh/id_rsa.pub 和 ~/.ssh/id_rsa
ssh-keygen -t rsa
建议:若不含特殊需求,每台个人电脑仅生成一对公私钥,尤其是后期课题组成员较多时,这种方式更便于管理员管理,有多少个公钥就是有多少个需要远程连接的个人电脑
说明:在windows下,用户目录指的是C:\Users\用户名,在Linux和macos上指的是/home/用户名
ssh-keygen还有其他的选项,demo如下:
ssh-keygen -t rsa -f ~/.ssh/01_key -C "Key for Zhang01"
#为zhang01这台服务器生成一个名为01_key的密钥对,在~/.ssh/下应该会出现01_key和01_key.pub
-t rsa 选项指定生成 RSA 类型的密钥对。
-f ~/.ssh/01_key 将生成的密钥文件保存到 ~/.ssh/ 目录下,并命名为 01_key 。
-C “Key for Zhang01” 将密钥文件的注释设置为 Key for Zhang01 ,这个注释可以用来标识密钥的用途。
1.2 公钥和私钥的介绍
对于一个密钥对, ~/.ssh/id_rsa.pub 这个以 .pub 结尾的文件通常被称为公钥,另一个文件 ~/.ssh/id_rsa 通常被称为私钥;
公钥需要被上传至服务器,可以被视作一把锁。而私钥一般会留在个人电脑,可以被视作开锁的钥匙。而在ssh连接时,只有锁和钥匙配对时,才能完成ssh连接。
2.公钥的上传
工作说明:公钥的上传,是管理员的工作,因为其他用户无法远程上传。其他成员请联系管理员进行协助。
在上一步骤中,我们已经完成了密钥对的创建,以 ~/.ssh/id_rsa.pub 和 ~/.ssh/id_rsa 密钥对为例,我们现在需要将公钥 ~/.ssh/id_rsa.pub 上传至服务器。下面在2.1先介绍管理员如何上传自己的公钥,然后再介绍管理员如何上传其他组员的公钥。
2.1 管理员上传自己公钥方法 : ssh-copy-id命令
在每台服务器进行ssh配置时,ssh默认是打开ssh密码登陆的,因此ssh-copy-id命令可以执行。而在管理员完成管理员个人电脑的公钥上传后,应该立刻关闭ssh密码登陆,保证服务器安全。之后其他成员无法用ssh-copy-id命令上传公钥,因此需要管理员协助公钥上传。
具体执行命令如下所示(如果是用Windows执行这一命令,需要修改公钥路径):
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
其中, ~/.ssh/id_rsa.pub 是本地公钥文件的路径,username 是远程服务器的用户名,server_ip 是服务器的IP地址。
-i ~/.ssh/id_rsa.pub 选项,指定公钥文件,强烈建议使用。如果不用的话,就会传一个默认的公钥到服务器上,如果一台个人电脑上有多个密钥对的话(再次强调,很不推荐这种单机器多密钥的做法),无法确定上传的是哪一个公钥。
如果是第一次执行ssh-copy-id命令,则需要 服务器对应用户名的密码 ,而这个密码是创建用户时确定的。而之后关闭了ssh密码登陆之后,所以导致任何用户无法执行ssh-copy-id命令。因此这一命令仅仅在于管理员第一次配置自己的公钥时使用。
2.2 管理员上传其他成员公钥的方法:个人工作经验
上传其他成员的公钥方式多种多样,我在此仅举例我个人在从事管理员工作时,常用的流程方法:
·指导其他成员完成密钥对的创建,并让成员通过“微信”、“网盘”等方式,将公钥发送到管理员的个人电脑;
·管理员通过ssh连接服务器,然后切换到成员用户的home目录下:
mkdir .ssh
cd ~/.ssh/
vi authorized_keys
#在vi中完成公钥的复制,然后保存退出vi,完成公钥上传
当然还有其他比较优美的写法,demo如下:
cat ~/.ssh/id_rsa.pub | ssh user@hostname "tee >> ~/.ssh/authorized_keys"
3.ssh连接
工作说明:对于这一部分内容,管理员和普通成员都可以进行参考
如果已经完成了 密钥对的生成 和 公钥的上传 则可以进行个人电脑和服务器的远程连接了!
3.1 终端连接
直接在个人电脑的终端中输入以下命令:
ssh username@server_ip
其中, username 是远程服务器的用户名,server_ip 是服务器的IP地址。
3.2 MobaXterm连接
张老师推荐,Shell命令行美观,进程监控方便。
3.3 VSCode 连接
1.注意:VSCode 的连接必须需要服务器网络是接通状态,比如服务器虽然连接了校园网,有了ip,但是没有在its.pku.edu.cn中确认连网,用Vscode无法远程连接。主要原因是Vscode会在每次ssh链接时,在目标服务器上下载 Vscode Server ,并在ssh连接断开后删除。~在这点上,原始的终端连接爆杀Vscode~
2.优点:
·Vscode在Coding过程中,按键习惯、编程视图、编程插件会和在个人电脑上完全一致,对于习惯Vscode敲代码的同学会十分友好。
·Vscode的文件上传下载直接采用拖动的方式,也有download选项。
·Vscode的~/.ssh/config可以用于保存服务器名称,将公钥上传到多个服务器上后,通过config文件修改会更方便地知道自己是在ssh连接哪一台服务器。
3.缺点:
·相比于MobaXterm而言,Vscode在ssh连接时Shell命令行不美观
4.ssh管理建议
工作说明:这是一些给服务器管理员的其他建议
4.1 每台个人电脑使用一个公钥
便于管理员管理;
4.2关闭ssh密码登陆
当管理员完成上传ssh之后,即可关闭ssh密码登陆。这里推荐使用下面这个命令进行修改
cat "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/01_no_passwd_login.conf
重启ssh服务即可完成ssh密码连接通道的关闭
sudo service ssh restart
说明:之前说过,第一次ssh-copy-id需要输入密码,而这里禁止了密码登陆ssh,也就是禁止了ssh-copy-id命令上传公钥
!下面是一种不推荐的修改方法:
如果管理员自己学习,可能会学习到网上部分资料会指导下面的修改方式,下面这个修改方式也是可行的,但是服务器管理最好有一个习惯“区分哪些是系统自带的,哪些是自己修改的”,下面这种直接修改系统的方式是很不推荐的,容易导致遗忘、沟通效率低等问题。而上面这个打补丁的方式,不仅高效快捷,而且能够区分是管理员手动打来一个补丁。
·打开并准备编辑 SSH 配置文件 ,路径可能是 /etc/ssh/sshd_config 或 /etc/sshd/sshd_config
·找到 PasswordAuthentication 这一行,将其值改为No
PasswordAuthentication no
·保存配置文件并重启 SSH 服务:
sudo service ssh restart
总之,能够通过打补丁的方式解决,就别改系统自带的文件。
4.3 ssh的其他可能出现问题
按照本章示例在ubuntu系统上操作,是不会出现下述问题的,但是如果管理员尝试其他方法后出现了报错现象,可以从下面的几个情况里找原因:
1.只上传了.pub公钥到~/.ssh/目录,但是没有在authorized_keys里设置;
2.authorized_keys权限和~/.ssh/权限关系错误。