红联Linux门户
Linux帮助

如何设置SSH密钥

发布时间:2017-05-17 15:36:27来源:zstack.org.cn作者:ZStack云计算
关于SSH密钥
SSH密钥提供一种更为安全的虚拟专有服务器登录机制,即利用SSH而非单纯依靠密码完成登录。与易被窃取的密码不同,SSH密钥几乎无法以暴力方式破解。生成的密钥对为我们提供两条字符串,即公钥与私钥。大家可以将公钥保存在任意服务器,并利用配备有私钥的客户端对该服务器者访问。当二者匹配时,系统即会解锁而不再需要输入密码内容。另外,大家也可以对私钥进行保护以额外提升安全性水平。
 
第一步、创建RSA密钥对
第一步是在客户设备上创建密钥对:
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密钥
现在公钥已经保存在/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实现登录而无需输入密码。不过,如果大家设置了口令,则需要在每次登录时都输入一次口令。
 
第四步(可选)、禁用Root登录密码
完成以上步骤后,我们还需要确保自己只能利用SSH密钥进行登录,即禁用root登录。
打开SSH配置文件:
sudo nano /etc/ssh/sshd_config
在文件中找到包含PermitRootLogin的一行,进行修改以确保用户只能利用SSH密钥完成登录:
PermitRootLogin without-password
重载以应用变更:
reload ssh
 
Digital Ocean Addendum
DIgital Ocean控制面板允许大家在创建新Droplet时为其添加公钥。大家可以在方便的位置生成SSH密钥,例如本地计算机,而后将其公钥上传至-SSH key位置。
此后,在我们创建新的VPS时,即可选择在服务器上使用该公钥。如此一来,服务器不会通过邮件向我们发送root密码,我们亦能够通过选定的客户端登录至新的虚拟专有服务器。如果大家创建了口令,则需要在每次登录时正确输入。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/30854.html