本文共 2575 字,大约阅读时间需要 8 分钟。
在使用ansible的时候会遇到如果不加 -k( 通过key验证)这个参数时认证失败。
可以通过 ssh-keygen - > ssh-copy-id [-i [identity_file]] [user@]machine 把操作机的私钥添加到目标主机的密钥列表中。
ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.50.**.**root@10.50.10.**'s password:Now try logging into the machine, with "ssh 'root@10.50.**.1*'", and check in: .ssh/authorized_keysto make sure we haven't added extra keys that you weren't expecting. .ssh]# ssh 10.50.10.161Last login: Mon May 24 10:19:54 2021 from 10.56.**.**
需求 :A 主机想通过shh 、scp...等通过ssh协议连接主机的命令来连接B主机,但是不想输入密码。
具体操作:
1、ssh-keygen 用这个命令是用来生成本机的公钥和私钥的
2、将A主机的id_rsa.pub copy到B主机上
ansible gpservers -m copy -a 'src=/root/.ssh/id_rsa.pub dest=/root/.ssh/' -k
3、在B主机2中的的id_rsa.pub 重定向到B主机的authorized_keys(一个信任主机列表)。注意一点要用 >> 追加,以免覆盖掉其他的密钥验证。造成其他程序报错。这点很重要
ansible gpservers -m shell -a 'cat /root/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys' -k
以上2 、3两步可以用ssh-copy-id(会自动将第一步中生成的id_rsa.pub添加到目标主机的authorized_keys中。) 命令来实现。如果是多个主机需要一个一个执行,用ansible批量操作还是较快。
如果需要相互信任,只需要将如上步骤逆向进行即可。
需要用到ansible的fetch模块。
1、现将gpserver的18台机器上的公钥fetch到控制机
注意fetch 回来是不会被覆盖的,fetch回来的文件是放在以ip命名的一个文件夹里面
2、重定向。
----------------------------------update 2020年5月24日21:38:15--------------------------------
如若是非root用于,别于root的用户的就是需要对authorized_keys 赋权。
默认是664
ssh]$ lltotal 16-rw-rw-r-- 1 gpadmin gpadmin 796 May 24 21:35 authorized_keys-rw------- 1 gpadmin gpadmin 1675 May 24 21:17 id_rsa-rw-r--r-- 1 gpadmin gpadmin 398 May 24 21:17 id_rsa.pub-rw-r--r-- 1 gpadmin gpadmin 403 May 22 22:00 known_hosts
非root用户ssh 自己需要710权限。这一点容易忽视,请注意
ssh]$ lltotal 16-rwx--x--- 1 gpadmin gpadmin 796 May 24 21:35 authorized_keys-rw------- 1 gpadmin gpadmin 1675 May 24 21:17 id_rsa-rw-r--r-- 1 gpadmin gpadmin 398 May 24 21:17 id_rsa.pub-rw-r--r-- 1 gpadmin gpadmin 403 May 22 22:00 known_hosts
如果希望ssh公钥生效需满足至少下面两个条件:
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600-----------------------------------update 2021年6月28日17:41:34
当然也可以用一个脚本取做
##ssh密钥分发脚本#!/bin/shread -p "输入远端服务器IP: " ip##ssh-copy-id -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa.pub root@$ipssh-copy-id -i ~/.ssh/id_rsa.pub root@$ipssh root@$ip 'sed -i "s/^#RSAAuthentication\ yes/RSAAuthentication\ yes/g" /etc/ssh/sshd_config'ssh root@$ip 'sed -i "s/^#PubkeyAuthentication\ yes/PubkeyAuthentication yes/g" /etc/ssh/sshd_config'ssh root@$ip 'sed -i "s/^#PermitRootLogin\ yes/PermitRootLogin\ yes/g" /etc/ssh/sshd_config'ssh root@$ip 'service sshd restart'hostname=`ssh root@${ip} 'hostname'`echo "添加主机名和IP到本地/etc/hosts文件中"echo "$ip $hostname" >> /etc/hostsecho "远端主机主机名称为$hostname, 请查看 /etc/hosts 确保该主机名和IP添加到主机列表文件中"
转载地址:http://eshqj.baihongyu.com/