原文地址:https://www.liaohuqiu.net/cn/posts/ssh-keygen-abc/
SSH是建立在应用层和传输层基础上的安全协议,其目的是专为远程登录会话和其他网络服务提供安全性的保障,用过SSH远程登录的人都比较熟悉,可以认为SSH是一种安全的Shell。SSH登录是需要用户名和密码的,要实现无密码登录,就需要创建SSH 密钥(ssh key),SSH 密钥可以认为是和另一台电脑通信时的唯一的识别证,SSH 密钥对可以让我们方便的登录到 SSH 服务器,而无需输入密码。GIT源代码管理就是使用此种安全机制,本文本将介绍SSH KEY的生成过程。
ssh 公钥认证是ssh认证的方式之一。通过公钥认证可实现ssh免密码登陆,git的ssh方式也是通过公钥进行认证的。
在用户目录的home目录下,有一个.ssh的目录,和当前用户ssh配置认证相关的文件,几乎都在这个目录下。
ssh-keygen 可用来生成ssh公钥认证所需的公钥和私钥文件。
使用 ssh-keygen 时,请先进入到 ~/.ssh 目录,不存在的话,请先创建。并且保证 ~/.ssh 以及所有父目录的权限不能大于 711
生成的文件名和文件位置
使用 ssh-kengen 会在~/.ssh/目录下生成两个文件,不指定文件名和密钥类型的时候,默认生成的两个文件是:
id_rsa ##私钥文件
id_rsa.pub ## 公钥文件
生成ssh key的时候,可以通过 -f 选项指定生成文件的文件名,如下:
[huqiu@101 .ssh]$ ssh-keygen -f test -C "test key"
~~文件名 ~~~~ 备注
如果没有指定文件名,会询问你输入文件名:
[huqiu@101 .ssh]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/huqiu/.ssh/id_rsa):
可以输入你想要的文件名,这里我们输入test。
密码
之后,会询问你是否需要输入密码。输入密码之后,以后每次都要输入密码。请根据你的安全需要决定是否需要密码,如果不需要,直接回车:
[huqiu@101 .ssh]$ ssh-keygen -t rsa -f test -C "test key"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
结果
如果文件名是test,结果是:
[huqiu@101 .ssh]$ ll test*
-rw------- 1 huqiu huqiu 1675 Sep 15 13:24 test
-rw-r--r-- 1 huqiu huqiu 390 Sep 15 13:24 test.pub
备注
上面生成的命令中,-C选项是公钥文件中的备注:
[huqiu@101 .ssh]$ cat test.pub
ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAQEAlgjiMw7AskxbvpQY9rmZPQxQBzh9laxFvbaini2EgmQkNsXBA9WJOXn2YBJauoiVsdUKBWA97avjsobrTxsCYvFr1yQQvTfTlbqlqGNIhQc/3HjTl2pIkClpDWvBrRN+jpyESS4MNbfOL1qjT4c/QhGvj6U6HrN6kUyn58oyyJpTzOLG74AZELJ2Led57QvTw1yJXZuAMWioR0A3BGd25fdocLX3ebux6ya8AsloOVYfsAqGlggrARe6FXjLfMH4a/nxaAdiDYVXU/Vr1ybK9P7SfyEDGJi3JtgiPUlA6vPxUC
E+9IJPQaqqeqCGzrJ6G/XO7om1v9YLLG/H/ZN2tQ== test key
~~~~备注
文件的权限
为了让私钥文件和公钥文件能够在认证中起作用,请确保权限正确。
对于.ssh 以及父文件夹,当前用户用户一定要有执行权限,其他用户最多只能有执行权限。
对于公钥和私钥文件也是: 当前用户一定要有执行权限,其他用户最多只能有执行权限。
对于利用公钥登录,对其他用户配置执行权限是没有问题的。但是对于git,公钥和私钥, 以及config等相关文件的权限,其他用户不可有任何权限。
配置SSH登录无密码验证
(使用key登录,工作中常用)我的测试环境已经是使用key登录,服务器之间无需密码验证的。关于配置使用key登录,我想我不再重复。但是有一点需要注意:不能禁止 password 登陆,否则会出现错误
第一种方法:
1、server2、3、4 节点操作相似,以 server2 主机为例
[root@server2 ~]# ssh-keygen -t rsa ##Enter 即可,选择默认方式
[root@server2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.25.12.3
[root@server2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.25.12.4
##server3 主机 copy 密钥至 server2、4 主机;server4 主机 copy 密钥
至 server2、3 主机
2、server5 主机:管理节点
[root@server5 ~]# ssh-keygen -t rsa
[root@server5 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.25.12.2
[root@server5 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.25.12.3
[root@server5 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.25.12.4
3、此时测试免密连接
server2、3、4 主机可互相免密登陆,server5 主机免密登陆其他主机
第二种方法:
server5 主机:管理节点
[root@server5 masterha]# ssh-keygen
[root@server5 masterha]# ssh-copy-id server5 ## 本机生成私钥
[root@server5 masterha]# ls /root/.ssh/
authorized_keys id_rsa id_rsa.pub known_hosts
[root@server5 masterha]# scp /root/.ssh/* server2:/root/.ssh/
[root@server5 masterha]# scp /root/.ssh/* server3:/root/.ssh/
[root@server5 masterha]# scp /root/.ssh/* server4:/root/.ssh/
此时测试免密连接
server2、3、4 主机可互相免密登陆,server5 主机免密登陆其他主机