配置 SSH 服务以使用证书登录 Linux 服务器

通过 SSH(Secure Shell)登录 Linux 服务器常见的认证方式有密码和证书两种。从安全角度考虑,大家都推荐用证书登录。第一次在服务器上配置 SSH 使用证书登录,并制作证书然后登录成功还是费了不少力气。配置证书登录 SSH 的过程还挺复杂。

记录配置 SSH 证书并从 Windows 系统中使用 PuTTY 和 FileZilla 登录的操作过程以方便下次使用。

0. 配置 SSH 证书登录的流程

配置服务器上的 SSH 为证书登录模式。

客户端生成证书: 私钥(private key)和公钥(pubkey)。
私钥留在客户端,需要安全保存: 一般会设置一个密码,可能还需要加密密钥文件。如果设置了密码,以后每次使用此私钥登录服务器的时候都需要先输入密码解开私钥。
公钥上传并添加到服务器上 SSH 配置指定的文件中,使之被信任。

提示:虽然同一对私钥/公钥可重复用于登录不同的服务器,但是基于安全考虑,一般需要针对不同服务器单独生成各自的私钥/公钥。

个人来讲,在 Windows 下使用 SSH 登录服务器主要涉及到两种特殊软件: PuTTY 和 FileZilla。

如果要使用 FileZilla 的 sftp 登录服务器,因为 FileZilla 使用 putty 连接 sftp 服务器,所以需要在 putty 的 default settings -> ssh -> Auth 中加上需要的私钥并保存就可以了。

如果使用 PuTTY 登录服务器,需要在 putty 的 default settings -> ssh -> Auth 中加上需要的私钥并保存,然后再登录。

1. 客户端生成私钥/公钥

使用私钥/公钥(密钥对,都是成对的)就需要考虑密钥本身的安全性,除了妥善保管之外,还有加密及验证环节的可靠性。根据这里的介绍(Secure Secure Shell),目前可以安全的选择 ed25519 和 rsa 两种加密系统。当然对应的 SSH 服务器也要配置使用这两种密钥交换系统。

公钥/私钥的生成是在客户端(需要用来登录服务器的用户自己的电脑),这样可以保证生成的私钥不在网络上传输。所以,在客户端,如果是 Linux 系统,运行以下任一指令,

# ssh-keygen -t ed25519 -o -a 100 -C "Your comment here" # ssh-keygen -t rsa -b 4096 -o -a 100 -C "Your comment here"

以生成相应格式的证书。按提示操作即可。

提示的 passphrase 就是用来保护私钥的密码了,需要用一个包含特殊字符并有一定长度的密码,当然还得记住,否则就没法用它了。

生成的密钥被保存在当前用户目录的 .ssh/ 目录下,两个文件: id_rsa 是私钥, id_rsa.pub 是公钥。

如果在 Windows 下,可以使用 PuTTY 相关的一个配套的 PuTTYgen(下载地址)来生成密钥对。最新的 PuTTY 是 0.65 版(还是 Beta 阶段)。双击 PuTTYgen 运行会打开窗口。

下面可以选择加密方式,默认是 SSH-2 RSA 即 rsa 方式; 旁边有位数可以选择,默认是 2048 位(现在大家已经开始使用 4096 位的了)。点击中间靠右侧的 Generate,然后在该窗口的上半部分空白处随意晃动鼠标,就能看到证书在根据这些随机的点产生,等进度条走完,密钥对产生,就到了下面的界面。

使用 PuTTYgen 产生密钥/公钥

使用 PuTTYgen 产生密钥/公钥

图中, 单击 Save public key 可以将公钥保存为文件(保存前最好将框框里面的文本文件复制出来放到一个文本文件中,后面会用到)。当然保存的公钥文件也可以使用 Windows 的记事本或 NotePad++ 之类的文本编辑器打开。上面保存的文件打开后内容是这个样子,

---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20151019" AAAAB3NzaC1yc2EAAAABJQAAAQEAmmEZDOTuPdrARNCZjWyZfZcDRHm4oRjZN6fL WG8eNh1KhNJu1pPtFvhACaWVE0vBfPS/6UzDeClNk1DScMmYVsqgsqwrjazcS4ee NFT1A9B4MeppI2N7pa5Gsvq/iD3cQpzAmGv8IZl6Aqoujz0429+dCoeUW6L2Mu49 0+0A6MWhEh/GQWV/VpYwf/J1KxAWgGuNpeMONN9el2+BiCwJdhmKwQaXNcmdqVvZ Wdm+A//+1GWJqydDWmFgYj8yXOGIHNlS0bNtw0Mrq+GrXCGiJuPWEXNDIlVA5Pgn w+6Xd0zv1qgeGe1CpjZzV2e/bTlG9AHLumJ/uWhp7ZuMwsBq6Q== ---- END SSH2 PUBLIC KEY ----

而前面复制出来的公钥应该是这个样子(这才是实际的公钥,后面要使用的就是下面这段字符,而不是上面的),

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAmmEZDOTuPdrARNCZjWyZfZcDRHm4oRjZN6fLWG8eNh1KhNJu1pPtFvhACaWVE0vBfPS/6UzDeClNk1DScMmYVsqgsqwrjazcS4eeNFT1A9B4MeppI2N7pa5Gsvq/iD3cQpzAmGv8IZl6Aqoujz0429+dCoeUW6L2Mu490+0A6MWhEh/GQWV/VpYwf/J1KxAWgGuNpeMONN9el2+BiCwJdhmKwQaXNcmdqVvZWdm+A//+1GWJqydDWmFgYj8yXOGIHNlS0bNtw0Mrq+GrXCGiJuPWEXNDIlVA5Pgnw+6Xd0zv1qgeGe1CpjZzV2e/bTlG9AHLumJ/uWhp7ZuMwsBq6Q== rsa-key-20151019

所以如果前面没有复制出来的话就要打开保存的公钥自己组合一下了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ea6f4174116370c347d23e6e737526c9.html