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
目录
相关文章
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
1014 78
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
1102 17
|
Ubuntu 安全 小程序
服务器版本的CentOS和Ubuntu哪个更适合你?
但是以上的比较并不说明Ubuntu是不稳定的或者是不安全的,只是以上比较过程中,在稳定性方面Ubuntu稍微逊色了一点。由于Ubuntu在个人桌面电脑的使用率远远高于CentOS,用Ubuntu搭建服务器,如果遇到什么问题,寻找解决方案相对比较容易,这让Ubuntu在选择方面更优于CentOS。如果你是一个初学者,那么毫无疑问Ubuntu是更适合的选择。如果你正在经营自己的公司,在这两者之间,CentOS会更好一些。
|
安全 关系型数据库 网络安全
安全加固:启动PostgreSQL 14服务器SSL加密的方法指南在CentOS 7环境中
通过上述步骤,你可以为PostgreSQL数据库服务器设置SSL加密,从而增加数据在传输中的安全性。确保维持证书的有效性,并且定期更新和管理密钥,以防止未授权访问。
562 0
|
Kubernetes Ubuntu Linux
阿里云服务器使用centos还是ubuntu?
在选择阿里云服务器操作系统时,CentOS和Ubuntu各有优势。CentOS以企业级稳定性著称,适合数据库、ERP等长期稳定需求;而Ubuntu开发者友好,支持最新硬件与功能,更适合开发/测试环境及云计算场景。两者在阿里云上均有官方镜像支持,性能差异可忽略。无特殊需求时推荐Ubuntu 22.04 LTS,若需RHEL生态则选AlmaLinux。根据实际需求、团队技术栈及场景灵活决策,阿里云还支持更换系统盘降低试错成本。
|
存储 安全 Linux
CentOS 7.9系统备份:每日定期发送最新备份文件到另一台服务器。
注意,这个解决方案忽略了很多细节,例如错误处理和通知、备份版本控制、循环处理旧的备份文件等等。此外,你也应该尽量保持源服务器和目标服务器之间快速,稳定且安全的网络连接,并且目标服务器应该有足够的空间用于存放每天的备份文件。如果你需要更高级的备份解决方案,可能需要考虑一下使用专门的备份工具或者服务。
739 18
|
存储 运维 网络协议
【Syslog】Centos下的syslog服务器配置
通过本文的配置指导,您不仅学会了如何安装和配置 `rsyslog`,还掌握了如何在防火墙中开放必要的端口,并验证服务器的配置是否正确。希望这些知识能够帮助您更好地管理和维护您的Linux系统。
3073 15
|
安全 Linux 网络安全
CentOS9忘记root账号密码
通过以上步骤,你可以成功重置CentOS 9系统中的root密码。如果在操作过程中遇到问题,建议查阅相关文档或联系系统管理员进行进一步排查和处理。
1308 9
|
安全 Linux 数据安全/隐私保护
Linux权限揭秘“Root与Sudo”
Root用户是Linux系统中的超级用户,拥有对系统的完全控制权。Root用户几乎可以执行任何命令,修改任何文件,甚至删除系统上的所有内容。因此,Root用户的使用需要非常谨慎,以避免潜在的安全风险。
864 6

热门文章

最新文章