Linux 设置秘钥登录(SSH免密远程登录)
Secure Shell 协议,简称 SSH,是一种加密网络协议,用于客户端和主机之间的安全连接,并支持各种身份验证机制,目前最实用的身份验证机制就是基于密码的身份验证和基于公钥的身份验证两种。Linux系统如何设置基于 SSH 密钥的身份验证,以及如何免密连接到主机的教程。
第一步:检查现有的 SSH 密钥对
首先检查主要是为了不覆盖现有密钥。运行以下Is 命令以查看,存在可以使用这些密钥并跳过第二步,或备份旧密钥并生成新密钥。如果看到 No such file or directory 或 no matches found 意味着没有 SSH 密钥,则可以继续执行下一步并生成新密钥。
ls -al ~/.ssh/id_*.pub
第二步:生成新的 SSH 密钥对
以下命令将生成一个新的 4096 位 SSH 密钥对,并将电子邮件地址作为注释:
ssh-keygen -b 4096 -C Email@qq.com
ssh-keygen常见参数:
-t:指定生成密钥的类型,默认使用SSH2d的rsa -f:指定生成密钥的文件名,默认id_rsa(私钥id_rsa,公钥id_rsa.pub) -b:指定密钥长度(bits),RSA最小要求768位,默认是2048位;DSA密钥必须是1024位(FIPS 1862标准规定) -C:添加注释; -P:提供旧密码,空表示不需要密码(-P ‘’) -N:提供新密码,空表示不需要密码(-N ‘’) -R hostname:从known_hosta(第一次连接时就会在家目录.ssh目录下生产该密钥文件)文件中删除所有属于hostname的密钥 -e:读取openssh的私钥或者公钥文件; -i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥; -l:显示公钥文件的指纹数据; -q:静默模式;
按 Enter 接受则默认文件位置和文件名:
Enter file in which to save the key(/home/yourusername/.ssh/id_rsa):
接下来,ssh-keygen 工具将要求输入安全密码(如果不想使用密码短语,请按 Enter:),您如果选择使用密码短语,将获得额外的安全保护。多数情况下,开发人员和系统管理员使用 SSH 而不使用密码,因为它们对完全自动化的流程很有用。
第三步:检查下.ssh目录下authorized_keys文件是否存在,存在直接跳过第三步
没有的话,创建一个,然后将id_rsa.pub的内容追加到authorized_keys文件尾。
cd
.
ssh
touch
authorized_keys ->如果
ssh
中存在此文件则省略此步骤
cat
id_rsa.pub >> authorized_keys -> 将id_rsa.pub的内容追加到authorized_keys
第四步:检测,是否需要修改ssh的配置(可忽略)
[root@centos-004 .ssh]#vim /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys
这里有一点很重要,在你配置密钥登录成功之前,千万不要太自信将PasswordAuthentication 设置no,否则你密钥登录不了,然后又禁止密码登录,就悲剧了。在密钥登录设置成功之后,可以将PasswordAuthentication 设置为no,禁用密码登录了,比较安全。
第五步:复制公钥
生成SSH 密钥对后,为实现没有密码登录到主机,需要将公钥复制到要管理的主机。将公钥复制到主机的最简单方法是使用名为的命令 ssh-copy-id 。在本地主机终端类型:
ssh-copy-id remote_username@server_ip_address
系统将提示输入 remote_username 的密码:
remote_username@server_ip_address's password:
用户通过身份验证后,公钥将附加到远程用户 authorized_keys 文件,并且将关闭连接。如果由于某种原因, ssh-copy-id 本地主机上没有该实用程序,则可以使用以下命令复制公钥:
cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
第六步:使用 SSH 密钥登录
完成上述步骤后,就能够登录到远程主机而不会被提示输入密码,测试口令:
ssh remote_username@server_ip_address