SSH提供了很多种不同的身份验证,其中最常用的两种便是密码验证和基于公钥/私钥的身份验证。与密码相比,这种方法有显著的优点:在验证身份的一方没有任何办法可以拿到用户的私钥。其次,公钥/私钥要比密码长的多,因而可以挫败通过穷举的方式破解的可能性。所以在这里我们介绍使用Xshell生成密钥,并进行认证方式登录到Linux的方法。
展开索引
一、步骤总结
使用密钥登录分为3步:
1、生成密钥(公钥与私钥),并配置ssh客户端Xshell使用密钥登录;
2、放置公钥(Public Key)到服务器~/.ssh/authorized_key文件中;
3、验证登陆是否可用。
1. 生成密钥(公钥与私钥),并配置ssh客户端Xshell使用密钥登录
打开Xshell,在菜单栏点击“工具”,在弹出的菜单中选择“(新建用户密钥生成向导)”,如下图:
弹出“新建用户秘钥生成向导”对话框,在“秘钥类型”项选择“RSA”公钥加密算法,“秘钥长度”选择任意密钥长度,长度越长,安全性越高,但生成所需时间越长。如下图我们选择8192位:
点击“下一步”,等待密钥生成
<加密8192位大约花费了35秒,这取决于CPU的性能>
完成后点击“下一步”
继续下一步,在“秘钥名称”中输入Key的文件名称,我这里为“AndyX.Net Key”;在“加密密码”处输入一个密码用于加密私钥,并再次输入密码确认,如下图:
点击“下一步”,密钥生成完毕(Public key Format选择SSH2-OpenSSH格式),这里显示的是公钥,我们可以复制公钥然后再保存,也可以直接保存公钥到文件,如下图:
点击“保存为文件”按钮,将公钥(Public key)保存到磁盘,文件名为“AndyX.Net_Key.pub”,六座备用。最后点击“完成”即可。
公钥保存完后,会返回“用户密钥”管理界面,在这里我们能看到刚才生成的密钥信息:
如果你不满意刚才填写的密钥名称,你也可以点击“属性”来进行改名:
接下来我们需要导出私钥文件。点击“导出”,导出为私钥文件。这个文件用于跟刚才的公钥(pub)文件配对的,请妥善保管。
如果你向本次实验一样添加了密码,在点击“保存”后,会弹出一个框,输入刚才设置的密码后才可以导出私钥。
返回保存的目录,验证公钥私钥文件是否存在:
2.放置公钥(Public Key)到服务器~/.ssh/authorized_key文件中
上面的步骤只是生成了公钥和私钥的过程,接下来就是要将刚才生成的公钥放到要管理的服务器上。
使用到Xshell登录到服务器,以root权限登录(注意:这里以root账户为例,如果是普通账户则不需要使用root权限)进入到“/root/.ssh/”目录(注意:如果使用普通账户,路径应当为/home/<账户名>/.ssh/),运行rz命令(如果没有rz命令,运行yum/apt/zypper install lrzsz安装),将key.pub发送到服务器并使用vi/nano命令打开:
如果/root/.ssh/目录不存在,则需要使用mkdir命令手动创建:
mkdir -p /root/.ssh/
最后将公钥权文件限修改为600,否则无法生效:
chmod 600 /root/.ssh/authorized_keys
3. 验证登陆是否可用
如果使用Xshell,即可直接进行登陆测试。
如果使用ssh控制台,你可能需要执行以下命令及进行登录(请注意-i参数):
ssh -i <SSH私钥文件路径> root@<服务器地址>
二、典型故障排查
症状: 所选的用户密钥未在远程主机上注册,请再试一次。
或者使用ssh命令结合-i参数进行登录,显示错误为“Permission denied (publickey)”
排查:
1.检查你登陆的用户目录下是否存在authorized_keys文件;
2.检查authorized_keys文件权限是否为600(-rw——);
3. 检查sshd_config服务是否已经开启的AuthorizedKeysFile字段;
4. 如果在最近修改过sshd_config文件,请重新载入ssh服务的配置:
systemctl restart sshd
(END)
参考文献: Xshell配置ssh免密码登录-密钥公钥(Public key) – 芹溪
[本文为AndyX.Net文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明!]