Linux Centos 服务器免密验证(ansible版/非root用户)

简介: Ansible中,-k或--ask-pass选项用于提示输入SSH密码。这在你需要通过SSH连接到目标主机,但又没有设置SSH密钥对的情况下非常有用。使用-k选项后,Ansible将在执行playbook或命令时提示你输入SSH密码。

Ansible中,-k或--ask-pass选项用于提示输入SSH密码。这在你需要通过SSH连接到目标主机,但又没有设置SSH密钥对的情况下非常有用。使用-k选项后,Ansible将在执行playbook或命令时提示你输入SSH密码。


在使用ansible的时候会遇到如果不加 -k( 通过key验证)这个参数时认证失败。

20200430223120743.png可以通过 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_keys
to make sure we haven't added extra keys that you weren't expecting.
 .ssh]# ssh 10.50.10.161
Last login: Mon May 24 10:19:54 2021 from 10.56.**.**

20200430223251696.png需求 :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 copy -a 'src=/root/.ssh/id_rsa.pub dest=/root/.ssh/' -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]$ ll
total 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]$ ll
total 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

20210412092243497.png如果希望ssh公钥生效需满足至少下面两个条件:

    1) .ssh目录的权限必须是700

     2) .ssh/authorized_keys文件权限必须是600


---------------update 2021年7月28日16:47:52


在建立hadoop集群时,做免密验证时有如下报错


centos7

 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop102
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

这个配置需要修改

1. /etc/ssh/sshd_config
2. PasswordAuthentication yes
~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.56.12
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.56.12's password:
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '192.168.56.12'"
and check to make sure that only the key(s) you wanted were added.
[root@hadoop100 ~]#
[root@hadoop100 ~]#
[root@hadoop100 ~]# ssh hadoop102
Last login: Wed Jul 28 07:57:20 2021 from 192.168.56.12
[root@hadoop102 ~]# exit

--update 2022年1月16日22:59:00

使用expect 多进程完成免密验证

注意点:

1. ip.txt 中的内容

192.168.56.11 ninesun0318 
192.168.56.12 ninesun0318
8.142.104.169 ro....

2. expect交互那块,根据实际情况修改

注意EOF 时不要随意敲空格,一定要用table键,send完消息之后一定要使用\r 回车。

  • spawn:触发,执行命令
  • expect:识别输出
  • send:发送信息
#!/bin/bash
# 2022年1月16日22:10:51
# ninesun
while read ip;do
#判断当前主机上是否有共要文件
if [ ! -f ~/.ssh/id_rsa ];then
        ssh-keygen -P "" -f ~/.ssh/id_rsa
fi
#从文件中ip 和密码
ipaddr=`echo $ip | awk '{print $1}'`
passwd=`echo $ip | awk '{print $2}'`
echo "$ipaddr"
echo "$passwd"
#判断是否可以ping通
{
ping -c1 -W1 $ipaddr >&/dev/null
if [ $? -eq 0 ];then
        /usr/bin/expect <<-EOF
        set timeout 10
        spawn ssh-copy-id  $ipaddr
        expect {
                #"yes/no" { send "yes\r"; exp_continue }
                "password:" { send "$passwd\r" }
        }
        expect eof
        EOF
fi
}&
done <ip.txt
wait
echo "all finished"

--update

2022年5月30日15:49:18

#!/bin/bash
# Copyright 2018 Xiak.com.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
##########################################
# 脚本用法
# passwordless.sh 192.168.1.5,192.168.1.6,192.168.1.7 your-cluster-password
# 参数说明:
#   总共两个参数,参数之间用空格隔开
#   第一个参数定义了集群的IP地址,IP之间用逗号隔开
#   第二个参数为所有集群的密码
##########################################
# 脚本只要发生错误,就终止执行
set -o errexit
# 遇到不存在的变量就会报错,并停止执行
set -o nounset
# 只要一个子命令失败,整个管道命令就失败,脚本就会终止执行
set -o pipefail
# 工作目录
root_dir="/xiak/k8s"
# 生成的 cert 文件存放目录
cert_dir="$root_dir/cert"
hosts="${HOSTS:="${1}"}"
password="${2}"
# 工具 expect
if ! (hash expect) >/dev/null 2>&1; then
    echo "=== expect command not found: Aborting ===" 1>&2
    exit 2
fi
if ! (hash ssh-copy-id) >/dev/null 2>&1; then
    echo "=== ssh-copy-id command not found: Aborting ===" 1>&2
    exit 2
fi
##########################################
# Function: SshKeyGen()
# Usage:    SshKeyGen
# Params:   Null
# Comments: 生成 id_rsa id_rsa.pub
##########################################
SshKeyGen() {
    # Delete old id_rsa
    rm -f ~/.ssh/id_rsa
    rm -f ~/.ssh/id_rsa.pub
    # Generate new id_rsa.pub
    expect -c "
        set timeout -1;
        spawn ssh-keygen -t rsa;
        expect {
            */root/.ssh/id_rsa* {send -- \r;exp_continue;}
            *passphrase):*      {send -- \r;exp_continue;}
            *again:*            {send -- \r;exp_continue;}
            eof                 {exit 0;}
        };"
}
##########################################
# Function: SshKeyGen()
# Usage:    SshKeyGen 192.168.1.2,192.168.1.3 password
# Params:
#   $1 主机列表,主机之间以逗号分隔,不能有空格
#   $2 主机的密码
# Comments:
#   1. 生成 id_rsa id_rsa.pub
#   2. 免密登录
##########################################
SshWithoutAuth() {
    SshKeyGen
    IFS=',' read -ra host_array <<< "${1}"
    for host in "${host_array[@]}";
    do
        echo "ssh-copy-id to $host"
        expect -c "set timeout -1;
            spawn ssh-copy-id $host;
            expect {
                *(yes/no)* {send -- yes\r;exp_continue;}
                *assword:* {send -- ${2}\r;exp_continue;}
                eof        {exit 0;}
            }" >/dev/null 2>&1;
    done
}
SshWithoutAuth ${hosts} ${password}
echo "All tasks done!"

-- update 2022年7月15日13:36:57

# 在control_node节点上生成密钥对
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
for host in 192.168.200.{27..33};do
  # 将各节点的主机信息(host key)写入control_node的
  # `~/.ssh/known_hosts`文件
  ssh-keyscan $host >>~/.ssh/known_hosts 2>/dev/null
  # 将control_node上的ssh公钥分发给各节点:
  sshpass -p'123456' ssh-copy-id root@$host &>/dev/null
done
目录
相关文章
|
10月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
884 78
|
10月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
12月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
1991 21
|
11月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
1040 13
|
11月前
|
监控 Linux 网络安全
FinalShell SSH工具下载,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux
FinalShell是一款国人开发的多平台SSH客户端工具,支持Windows、Mac OS X和Linux系统。它提供一体化服务器管理功能,支持shell和sftp同屏显示,命令自动提示,操作便捷。软件还具备加速功能,提升访问服务器速度,适合普通用户和专业人士使用。
3601 0
|
11月前
|
存储 安全 Linux
Linux服务器上安装配置GitLab的步骤。
按照以上步骤,一个基础的GitLab服务应该运行并可以使用。记得定期检查GitLab官方文档,因为GitLab的安装和配置步骤可能随着新版本而变化。
985 0
|
8月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
705 10
|
8月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
799 8
|
8月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
8月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。

热门文章

最新文章