Linux 配置SSH免密登录 “ssh-keygen”的基本用法
1什么是SSH
引用百度百科的说明:
SSH为SecureShell的缩写,由IETF的网络小组(NetworkWorkingGroup)所制定;它是建立在应用层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
为了在不同平台/网络主机之间的通信安全,很多时候我们都要通过ssh进行认证.ssh认证方式主要有2种:
①基于口令的安全认证:每次登录的时候都要输入用户名和密码,由于要在网络上传输密码,可能存在中间人攻击的风险;
②基于密钥的安全认证:配置完成后就可以实现免密登录,这种方式更加安全——不需要在网络上传递口令,只需要传输一次公钥.常见的git的ssh方式就是通过公钥进行认证的.
2配置SSH免密登录
说明:这里演示所用的服务器操作系统是CentOS7.我们的目标是:
A服务器(172.16.22.131)能免密登录B服务器(172.16.22.132).
注意:ssh连接是单向的,A能免密登录B,并不能同时实现B能免密登录A.
2.1安装必需的软件
在操作之前,先确保所需要的软件已经正常安装.
这里我们需要安装ssh-keygen和ssh-copy-id,安装方式如下:
#安装ssh-keygen,需要确保服务器可以联网.博主这里已经安装完成,所以没有做任何事. [root@localhost~]#yuminstall-yssh-keygen Loadedplugins:fastestmirror,langpacks base|3.6kB00:00:00 epel|3.6kB00:00:00 extras|2.9kB00:00:00 updates|2.9kB00:00:00 Loadingmirrorspeedsfromcachedhostfile Nopackagessh-keygenavailable. Error:Nothingtodo #安装ssh-copy-id [root@localhost~]#yuminstall-yssh-copy-id Loadedplugins:fastestmirror,langpacks Loadingmirrorspeedsfromcachedhostfile Nopackagessh-copy-idavailable. Error:Nothingtodo
2.2ssh-keygen创建公钥-私钥对
(1)在指定目录下生成rsa密钥,并指定注释为“shoufeng”,实现示例:
[root@localhost~]#ssh-keygen-trsa-f~/.ssh/id_rsa-C"shoufeng" #~密钥类型~密钥文件路径及名称~备注信息 Generatingpublic/privatersakeypair. Enterpassphrase(emptyfornopassphrase):#输入密码,若不输入则直接回车 Entersamepassphraseagain:#再次确认密码,若不输入则直接回车 Youridentificationhasbeensavedin/root/.ssh/id_rsa. Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub. Thekeyfingerprintis: 9a:e3:94:b9:69:c8:e9:68:4b:dc:fa:43:25:7f:53:f1shoufeng Thekey'srandomartimageis: +--[RSA2048]----+ || |.| |o| |...E| |+S.| |....=o| |oo.oB..| |..o=o.+| |.++oo+| +-----------------+
注意:密钥的文件名称必须是id_xxx,这里的xxx就是-t参数指定的密钥类型.比如密钥类型是rsa,那么密钥文件名就必须是id_rsa.
(2)ssh-keygen常用参数说明:
-t:密钥类型,可以选择dsa|ecdsa|ed25519|rsa;
-f:密钥目录位置,默认为当前用户home路径下的.ssh隐藏目录,也就是~/.ssh/,同时默认密钥文件名以id_rsa开头.如果是root用户,则在/root/.ssh/id_rsa,若为其他用户,则在/home/username/.ssh/id_rsa;
-C:指定此密钥的备注信息,需要配置多个免密登录时,建议携带;
-N:指定此密钥对的密码,如果指定此参数,则命令执行过程中就不会出现交互确认密码的信息了.
举例说明:同时指定目录位置、密码、注释信息,就不需要输入回车键即可完成创建:
ssh-keygen-trsa-f~/.ssh/id_rsa-Nshoufeng-Cshoufeng
(3)前往~/.ssh/目录下查看生成的文件:
#生成的文件以test_rsa开头,test_rsa是私钥,test_rsa.pub是公钥: [root@localhost.ssh]#ls test_rsatest_rsa.pub #通过cat命令查看公钥文件: [root@localhost.ssh]#catid_rsa.pub ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQC2JpLMqgeg9jB9ZztOCw0WMS8hdVpFxthqG1vOQTOji/cp0+8RUZl3P6NtzqfHbs0iTcY0ypIJGgx4eXyipfLvilV2bSxRINCVV73VnydVYl5gLHsrgOx+372Wovlanq7Mxq06qAONjuRD0c64xqdJFKb1OvS/nyKaOr9D8yq/FxfwKqK7TzJM0cVBAG7+YR8lc9tJTCypmNXNngiSlipzjBcnfT+5VtcFSENfuJd60dmZDzrQTxGFSS2J34CuczTQSsItmYF3DyhqmrXL+cJ2vjZWVZRU6IY7BpqJFWwfYY9m8KaL0PZ+JJuaU7ESVBXf6HJcQhYPp2bTUyff+vdVshoufeng #可以看到最后有一个注释内容shoufeng
2.3ssh-copy-id把A的公钥发送给B
默认用法是:ssh-copy-idroot@172.16.22.132,ssh-copy-id命令连接远程服务器时的默认端口是22,当然可以指定文件、远程主机的IP、用户和端口:
#指定要拷贝的本地文件、远程主机的IP+用户名+端口号: [root@localhost.ssh]#ssh-copy-id-i~/.ssh/id_rsa.pub-p22root@172.16.22.132 /usr/bin/ssh-copy-id:INFO:attemptingtologinwiththenewkey(s),tofilteroutanythatarealreadyinstalled /usr/bin/ssh-copy-id:INFO:1key(s)remaintobeinstalled--ifyouarepromptednowitistoinstallthenewkeys root@172.16.22.132'spassword:#输入密码后,将拷贝公钥 Numberofkey(s)added:1 Nowtryloggingintothemachine,with:"ssh-p'22''root@172.16.22.132'" andchecktomakesurethatonlythekey(s)youwantedwereadded.
2.4在A服务器上免密登录B服务器
[root@localhost.ssh]#sshroot@172.16.22.132 Lastlogin:FriJun1408:46:042019from192.168.34.16#登录成功