一、 实验原理
通过 SSH(Secure Shell)登录 Linux 服务器常见的认证方式有密码和证书两种。从安全角度考虑,大家都推荐用证书登录。
配置服务器上的 SSH 为证书登录模式。
客户端生成证书: 私钥(private key)和公钥(public key)。
私钥留在客户端,需要安全保存: 一般会设置一个密码,可能还需要加密密钥文件。如果对自己电脑里存的文件的安全有信心,就不信要设置密码了。而如果设置了密码,以后每次使用此私钥登录服务器的时候都需要先输入密码解开私钥。
公钥上传并添加到服务器上 SSH 配置指定的文件中,使之被信任。
使用 PuTTY 登录服务器,需要在 putty 的 default settings -> ssh -> Auth 中加上需要的私钥并保存,然后再登录。
二、 实验结果:
1、 准备:
登录Shell软件:PuTTY;证书生成软件:puttygen
2、 客户端生成私钥/公钥对:
下面可以选择加密方式,默认是 SSH-2 RSA 即 rsa 方式; 旁边有位数可以选择,默认是 2048 位。点击中间靠右侧的 Generate,然后在该窗口的上半部分空白处随意晃动鼠标,就能看到证书在根据这些随机的点产生,等进度条走完,密钥对产生,就到了下面的界面。
生成key后可以修改comment标识key的用途。
保存private key
保存私钥前可以对private key设置密码,每次使用证书登录前都要验证密码,更加安全,但是不设置也是可以的。不设置的话会有提示确认是否不设置密码。
3、 SSH服务器配置:
安装SSH服务:sudo apt-get install ssh
启动SSH服务:sudo /etc/init.d/ssh start
修改SSH配置文件:sudo vim /etc/ssh/sshd_config
a. 端口
端口,默认 22,建议自定义,比如 2222、1234、54321 等(一般高于 2000 而不能超过 65555)
b. 协议
Protocol 2
c. 登录控制
禁止 Root 账户登录,
PermitRootLogin no
不允许空密码登录,默认已经是 no,
PermitEmptyPasswords no
允许 SSH 登录的用户名/用户组,
AllowUsers sjc
不让 sshd 去检查用户目录或某些重要档案的权限数据,这是为了防止用户将某些重要档案的权限设错。例如用户的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登录,
StrictModes no
d. 允许密钥登录
允许用户自行使用成对的密钥系统登录服务器,这里仅针对协议版本 2。用户自己生成的公钥数据就放置于相应的(服务器上该用户自己的)用户目录(例如,/home/sjc)下的 .ssh/authorized_keys 文件里面,
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
4、 在服务器上加入用户公钥
生成的用户的公钥需要经由系统管理员(root)导入服务器上的 SSH 的信任证书列表里面;或者如果你已经在服务器上有了用户名可直接访问服务器,则将自己的公钥添加到自己的用户目录下的特定文件里即可。SSH 服务器会自动根据用户登录服务器使用的用户名到服务器上相应的用户目录里的 .ssh/authorized_keys 文件里寻找公钥。
修改文件访问权限(如果在 sshd_config 中配置了 StrictModes 为 yes,那么这个就是必须的了,否则无法工作),
# chmod 700 /home/sjc/.ssh
# chmod 600 /home/sjc/.ssh/authorized_keys
重启SSH服务:
# systemctl restart sshd
5、 使用证书登录
输入正确的HostName(IP Address)与Port,在左侧的Connection/SSH/Auth中设置Private Key File位置,回到Session保存,方便下次打开,点击右下的Open,输入用户名(如果私钥设置了密码还需要输入密码)即可连接到服务器了
三、 实验总结与收获:
通过本次实验,学会了如何利用SSH使用证书远程登陆服务器,并学会了如何生成公钥和私钥,如何在服务器配置SSH服务。