原理简介
SSH证书认证登录的基础是一对唯一匹配密钥: 私钥(private key)和公钥(public key)。公钥用于对数据进行加密,而且只能用于加密。而私钥只能对使用所匹配的公钥,所加密过的数据进行解密。私钥需要用户单独妥善保管。SSH 客户端使用私钥向服务器证明自已的身份。而公钥是公开的,可以按需将其配置到目标服务器上自己的相应帐号中。
在进行 SSH 登录认证时,进行私钥和公钥协商。如果匹配,则身份得以证明,认证成功,允许登录。否则,将会继续使用密码验证等其它方式进行登录校验。
在 Linux 环境下,通常使用系统自带的 ssh-keygen 软件来创建和管理密钥对。请执行如下步骤创建密钥对:
- 以任意具有 ssh-keygen 执行权限的用户登录服务器。
- 使用如下指令,基于 rsa 算法创建密钥对:
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file inwhich to save the key (/root/.ssh/id_rsa): → 默认保存路径和文件名,可以按需修改。
Enter passphrase (empty for no passphrase): → 如前面所述,不设置密码,回车确认即可。
Enter same passphrase again: → 不设置密码,回车确认即可。
Your identification has been saved in /root/.ssh/id_rsa. → 创建的私钥文件。
Your public key has been saved in /root/.ssh/id_rsa.pub. → 创建的公钥文件。
The key fingerprint is:
17:b8:0e:76:cb:57:21:3b:f2:bb:8b:a2:42:2b:54:be root@iZ233gr74jvZ
The key's randomart image is:
+--[ RSA 2048]----+
| |
| . |
| . o . |
| . . + . |
| o o S + . |
| ... . = = o |
|.. .. + o |
|. oE . o . |
| . ... .. +o |
+-----------------+说明:
如果 .ssh 目录不存在,程序会自动创建。
生成的密钥对默认保存在当前用户家目录下的 .ssh 文件夹中,文件名默认为 id_rsa(私钥) 和 id_rsa.pub(公钥)。用户可以按需设置保存路径和文件名。
3.ssh-copy-id 只能copy公钥
ssh-copy-id -i .ssh/id_rsa.pub "-p 22 root@192.168.1.27"
需要输入密码后,就能分发公钥了
4. 验证:ssh root@192.168.1.27 /sbin/ifconfig eth0 查看ip
Windows 环境自动登录
Window 环境下,还是以常见的NetSarang Xshell为例,请执行如下配置进行自动登录:
- 单击 文件 > 属性,打开主机属性配置窗口。
- 点击 连接 > 用户身份验证,如下图所示,将 方法 设置为 Public Key;将 用户名 设置为已经设置了证书登录的相应用户名;将 用户密钥 设置为对应的私钥。最后,点击 确定。
-
这个时候,你已经有了一对密钥,需要开始设定服务器的配置,启用密钥认证登录,同时为了系统安全着想,关闭密码认证的方式
vim /etc/ssh/sshd_config
修改下面几处:
PubkeyAuthentication yes #启用PublicKey认证。
AuthorizedKeysFile .ssh/authorized_keys #PublicKey文件路径。
PasswordAuthentication no #不适用密码认证登录。
- 上面配置完成后,需要重启sshd服务。
-
接着,在你需要的登录的用户家目录的.ssh目录下,编辑authorized_keys文件,将开始我们生成密钥对的公钥写到这个文件中。
公钥查看方法:点击Xshell菜单的工具,选择用户密钥管理者,双击你刚刚生成的密钥打开属性,选择公钥,复制公钥的内容,稍后使用
- 注意:要添加多个用户,需要在这个文件后,换行,加入另一个公钥即可;
- 接着,修改该文件的权限,chmod 600 ,否则可能会遇到问题
- 至此,登录测试