扩展:ssh密钥认证
Ansible配置ssh密钥认证会方便很多,MySQL搭建MHA高可用也需要用到,所以单独写一篇笔记。
工作原理
1、服务器A生成一对密钥,分别为公钥跟私钥
2、服务器A将公钥发给远程服务器,私钥保留
3、远程服务器通过公钥验证服务器A的私钥
4、验证成功,即可通过服务器A免密登录远程服务器
ssh-keygen命令
该命令不加参数为交互式执行
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/rsa/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/rsa/id_rsa.
Your public key has been saved in /root/.ssh/rsa/id_rsa.pub.
The key fingerprint is:
SHA256:8sKOrUtlAmnswKU4W0ZErdYNXZBG1OCjatWHn9nmWQw root@master
The key's randomart image is:
+---[RSA 2048]----+
| o+o +=*. |
|ooo.o.+ . |
|+oBo +o |
| Oo..o.o |
|... + * S E |
| o = = + o |
| o . o = o o |
| . . + . o o |
| +oo o |
+----[SHA256]-----+
$ cd /root/.ssh/rsa/
$ ls
id_rsa id_rsa.pub
如上,ssh-keygen不加参数则会提示输入密钥生成路径,回车为默认路径;
还有密钥是否加密,回车为不加密。
其中后缀名.pub为公钥,没有后缀为私钥。
-f参数指定生成密钥的路径
$ ssh-keygen -f /root/.ssh/rsa/id_rsa_tz
-P参数为密钥设置密码
$ ssh-keygen -P '123' -f /root/.ssh/rsa/id_rsa_tz
#不为密钥设置密码
$ ssh-keygen -P '' -f /root/.ssh/rsa/id_rsa_tz
注意同时指定-f跟-P参数使用ssh-keygen命令将不会进入交互模式
-p参数为私钥添加、取消、修改密码
#此命令会进入交互模式
$ ssh-keygen -f /root/.ssh/rsa/id_rsa_tz -p
-t参数生成指定类型的密钥
$ ssh-keygen -t dsa -P '' -f /root/.ssh/rsa/id_rsa_tz
ssh2密钥类型包括dsa、ecdsa、ed25519、rsa这四种。
-b参数生成指定位长的密钥
$ ssh-keygen -b 1024 -t dsa -P '' -f /root/.ssh/rsa/id_rsa_tz
-y参数根据私钥生成对应的公钥
$ ssh-keygen -f /root/.ssh/rsa/id_rsa_tz -y > id_rsa_tz.pub
如果不使用重定向,则会将公钥打印在屏幕上。
ssh命令
-i参数指定对应的密钥连接对应的主机
$ ssh -i ~/.ssh/id_rsa_tz tz@10.154.0.112
ssh-copy-id命令
作用:复制公钥到其他主机
-i参数将指定的公钥发给远程主机。
远程主机会把该公钥存放在/root/.ssh/authorized_keys文件中。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.154.0.112
-p参数指定远程主机端口号,有时应生产环境要求需要更改ssh端口号保障安全性,这时可以使用-p手工指定端口号。
#centos6
$ ssh-copy-id -i ~/.ssh/id_rsa.pub "root@10.154.0.112 -p 2222"
#centos7
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.154.0.112 -p 2222
问题汇总
1、ssh服务器禁用基于公钥认证
$ vim /etc/ssh/sshd_config
...
PubkeyAuthentication yes
2、ssh服务端修改了默认的公钥认证文件路径
$ vim /etc/ssh/sshd_config
...
AuthorizedKeysFile /root/.ssh/authorized_keys
3、ssh服务端相关目录或者文件的权限过大
.ssh目录的权限正常700
authorized_keys文件的权限默认为600
4、ssh服务端的authorized_keys文件中包含windows字符
authorized_keys文件使用win系统打开处理,会出现win的换行符等符号不符合unix编码规范,可使用dos2unix解决
$ yum install -y dos2unix
$ dos2unix /root/.ssh/authorized_keys
5、ssh客户端连接服务端时,对应用户名写错
老司机疲劳驾驶常犯错误,需要谨慎对待。
6、ssh客户端的私钥权限过大
私钥权限默认为600,权限过大会报如下错误
Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /root/.ssh/id_rsa
7、创建密钥对时,没有使用默认的密钥名称
使用自定义的密钥名称时,需要指定-i参数指定私钥,否则无法基于密钥认证。
学习来自:朱老师博客

浙公网安备 33010602011771号