提供:ZStack云计算
SSH密钥提供一种更为安全的虚拟专有服务器登录机制,即利用SSH而非单纯依靠密码完成登录。与易被窃取的密码不同,SSH密钥几乎无法以暴力方式破解。生成的密钥对为我们提供两条字符串,即公钥与私钥。大家可以将公钥保存在任意服务器,并利用配备有私钥的客户端对该服务器者访问。当二者匹配时,系统即会解锁而不再需要输入密码内容。另外,大家也可以对私钥进行保护以额外提升安全性水平。
第一步是在客户设备上创建密钥对:
ssh-keygen -t rsa输入Gen Key命令后,系统会提示以下问题:
Enter file in which to save the key (/home/demo/.ssh/id_rsa):这里可以直接按下回车,从而将该文件保存在用户home目录中(本示例中的用户名为demo)。
Enter passphrase (empty for no passphrase):大家可以自行决定是否使用口令。输入口令的作法确有优势:无论密钥的安全性有多高,也无论其如何进行加密,最终效果依然取决于其是否无法为他人所获取。在使用口令时,即使受口令保护的私钥落入未授权用户手中,他们亦无法在不知道口令内容的情况下使用该私钥。当然,其缺点在于在每次使用时,我们都需要手动输入口令。
完整的密钥生成流程如下所示:
ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/demo/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/demo/.ssh/id_rsa. Your public key has been saved in /home/demo/.ssh/id_rsa.pub. The key fingerprint is: 4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a The key's randomart image is: +--[ RSA 2048]----+ | .oo. | | . o.E | | + . o | | . = = . | | = S = . | | o + = + | | . o + o . | | . o | | | +-----------------+现在公钥已经保存在/home/demo/.ssh/id_rsa.pub,而私钥则保存在/home/demo/.ssh/id_rsa。
密钥对生成完成后,我们需要将公钥放置在需要使用的虚拟服务器当中。
大家可以使用以下命令将公钥复制到新设备的authorized_keys文件当中。请确保将用户名与IP地址替换为您的实际值。
ssh-copy-id user@123.45.56.78另外,大家也可以利用SSH直接粘贴密钥:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"无论使用哪种方法,其显示结果应如下所示:
The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established. RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts. user@12.34.56.78's password: Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in: ~/.ssh/authorized_keys现在大家即可使用user@12.34.56.78实现登录而无需输入密码。不过,如果大家设置了口令,则需要在每次登录时都输入一次口令。
完成以上步骤后,我们还需要确保自己只能利用SSH密钥进行登录,即禁用root登录。
打开SSH配置文件:
sudo nano /etc/ssh/sshd_config在文件中找到包含PermitRootLogin的一行,进行修改以确保用户只能利用SSH密钥完成登录:
PermitRootLogin without-password重载以应用变更:
reload sshDIgital Ocean控制面板允许大家在创建新Droplet时为其添加公钥。大家可以在方便的位置生成SSH密钥,例如本地计算机,而后将其公钥上传至-SSH key位置。
此后,在我们创建新的VPS时,即可选择在服务器上使用该公钥。如此一来,服务器不会通过邮件向我们发送root密码,我们亦能够通过选定的客户端登录至新的虚拟专有服务器。如果大家创建了口令,则需要在每次登录时正确输入。
本文来源自DigitalOcean Community。英文原文:How To Set Up SSH Keys By Etel Sverdlov
翻译:diradw