Advertisement

使用Shell脚本自动化批量发送公钥至远程主机的方法

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文介绍了如何利用Shell脚本实现将公钥自动分发到多台远程服务器上,简化SSH登录流程,提高工作效率。 在IT行业中,SSH(Secure Shell)是一种用于在网络之间安全地执行命令和传输数据的协议。在多台远程主机上进行自动化运维时,通常需要通过SSH建立无密码登录,以简化管理流程。`ssh-copy-id`命令是SSH的一部分,用于将本地的公钥复制到远程主机的`.ssh/authorized_keys`文件中,从而实现免密登录。本段落将详细讲解如何使用shell脚本来批量执行`ssh-copy-id`,以提高效率。 ### 需求 批量自动化地将本地的SSH公钥发送到一系列远程主机。这在管理大量服务器或集群时非常有用,避免了手动逐个配置的繁琐过程。 ### 环境 为了确保脚本能够顺利运行,需要关闭以下服务: - **firewalld**:防火墙可能阻止SSH连接,关闭它可以确保SSH通信畅通。 - **SELinux**:安全增强型Linux,其严格的安全策略可能限制了SSH的行为,关闭它可以使脚本不受限制。 ### 实现方式 #### 使用`sshpass`命令 `sshpass`是一个用于提供非交互式SSH密码认证的工具。在脚本中,我们可以通过`sshpass`传递密码,然后使用`ssh-copy-id`将公钥发送到远程主机。以下是一个简单的示例脚本(`ssh-sshpass.sh`): ```bash #!binbash NET=172.20.200 USER=(root hechunping) PASSWORD=123456 # 生成SSH公钥(如果没有的话) ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &> /dev/null # 修改SSH配置,禁用StrictHostKeyChecking sed -i s/StrictHostKeyChecking.*/StrictHostKeyChecking no/ /etc/ssh/ssh_config # 安装sshpass(如果尚未安装) rpm -q sshpass &> /dev/null || yum -y install sshpass &> /dev/null # 循环遍历网络中的所有IP地址 for i in {1..254} ; do sshpass -p $PASSWORD ssh-copy-id -i ${USER[0]}@${NET}.${i} &> /dev/null done # 等待所有后台进程完成 wait ``` 这个脚本会尝试连接`172.20.200.1`至`172.20.200.254`之间的所有IP地址,并使用指定的用户名和密码将公钥发送过去。 #### 调用`expect`命令 `expect`是一个Tcl扩展,专门用于自动化与交互式程序的通信,如SSH。它允许脚本发送输入、等待预期的输出,然后继续执行。以下是使用`expect`的示例脚本(`ssh-expect.sh`): ```bash #!binbash NET=172.20.200 USER=(root hechunping) PASSWORD=123456 # 生成SSH公钥 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &> /dev/null # 循环遍历网络中的所有IP地址 for i in {1..254} ; do expect <

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 使Shell
    优质
    本文介绍了如何利用Shell脚本实现将公钥自动分发到多台远程服务器上,简化SSH登录流程,提高工作效率。 在IT行业中,SSH(Secure Shell)是一种用于在网络之间安全地执行命令和传输数据的协议。在多台远程主机上进行自动化运维时,通常需要通过SSH建立无密码登录,以简化管理流程。`ssh-copy-id`命令是SSH的一部分,用于将本地的公钥复制到远程主机的`.ssh/authorized_keys`文件中,从而实现免密登录。本段落将详细讲解如何使用shell脚本来批量执行`ssh-copy-id`,以提高效率。 ### 需求 批量自动化地将本地的SSH公钥发送到一系列远程主机。这在管理大量服务器或集群时非常有用,避免了手动逐个配置的繁琐过程。 ### 环境 为了确保脚本能够顺利运行,需要关闭以下服务: - **firewalld**:防火墙可能阻止SSH连接,关闭它可以确保SSH通信畅通。 - **SELinux**:安全增强型Linux,其严格的安全策略可能限制了SSH的行为,关闭它可以使脚本不受限制。 ### 实现方式 #### 使用`sshpass`命令 `sshpass`是一个用于提供非交互式SSH密码认证的工具。在脚本中,我们可以通过`sshpass`传递密码,然后使用`ssh-copy-id`将公钥发送到远程主机。以下是一个简单的示例脚本(`ssh-sshpass.sh`): ```bash #!binbash NET=172.20.200 USER=(root hechunping) PASSWORD=123456 # 生成SSH公钥(如果没有的话) ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &> /dev/null # 修改SSH配置,禁用StrictHostKeyChecking sed -i s/StrictHostKeyChecking.*/StrictHostKeyChecking no/ /etc/ssh/ssh_config # 安装sshpass(如果尚未安装) rpm -q sshpass &> /dev/null || yum -y install sshpass &> /dev/null # 循环遍历网络中的所有IP地址 for i in {1..254} ; do sshpass -p $PASSWORD ssh-copy-id -i ${USER[0]}@${NET}.${i} &> /dev/null done # 等待所有后台进程完成 wait ``` 这个脚本会尝试连接`172.20.200.1`至`172.20.200.254`之间的所有IP地址,并使用指定的用户名和密码将公钥发送过去。 #### 调用`expect`命令 `expect`是一个Tcl扩展,专门用于自动化与交互式程序的通信,如SSH。它允许脚本发送输入、等待预期的输出,然后继续执行。以下是使用`expect`的示例脚本(`ssh-expect.sh`): ```bash #!binbash NET=172.20.200 USER=(root hechunping) PASSWORD=123456 # 生成SSH公钥 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa &> /dev/null # 循环遍历网络中的所有IP地址 for i in {1..254} ; do expect <
  • 使Shell邮件示例
    优质
    本教程提供了一个实用的Shell脚本案例,演示如何自动化地通过命令行接口发送电子邮件。适合需要高效管理服务器或进行数据备份等任务的技术人员阅读和应用。 本段落主要介绍了通过Shell脚本实现自动发送邮件的方法,并展示了如何使用.muttrc文件配合shell脚本来完成这一任务。需要相关帮助的读者可以参考此内容。
  • Shell使curl接口简易
    优质
    本文介绍了一种在Shell环境中利用curl命令实现批量调用API接口的简便脚本编写技巧,适合需要自动化处理大量数据或频繁交互API的应用场景。 本段落主要介绍了如何使用shell脚本批量执行curl接口的简单方法,并通过示例代码进行了详细的讲解。这对于学习或使用shell的人来说具有一定的参考价值,有需要的朋友可以跟着文章一起来学习一下。
  • Shell——杀进
    优质
    介绍如何使用Shell脚本来自动化管理和终止系统中的特定进程,帮助用户提高工作效率和系统维护能力。 在Linux系统下编写一个自动匹配进程号并杀死特定进程的shell脚本。
  • Shell删除ES索引
    优质
    本文介绍了一种使用Shell脚本来实现批量删除Elasticsearch(ES)索引的方法,适用于需要高效管理大量索引的场景。通过编写简洁的脚本,可以自动化地清理不再使用的旧索引,优化存储空间和查询效率。 今天分享一种使用Shell脚本批量删除ES索引的方法。我觉得这种方法非常实用,并且相信对大家也会有所帮助。希望有兴趣的朋友可以一起参考看看。
  • 使Shell实现MySQL表中数据插入
    优质
    本文介绍了如何利用Shell脚本来自动化地将大量数据高效插入到MySQL数据库表中,提供了一种处理大数据量快速导入的有效解决方案。 本段落主要介绍了如何使用Shell脚本在MySQL表中批量插入数据的方法,需要的朋友可以参考。
  • 三种使Shell更改文件扩展名
    优质
    本文介绍了如何利用简单的Shell脚本命令来高效地批量修改文件的扩展名,提供三种实用的方法。适合需要快速处理大量文件扩展名变更需求的技术爱好者和开发人员参考。 本段落主要介绍了使用Shell脚本批量更改文件后缀的三种方法:利用find、xargs与sed组合;通过for循环;以及运用rename命令。这三种方式都可以帮助用户高效地完成大量文件的重命名工作,有需要的朋友可以参考这些技巧。
  • 使Shell进行户添加
    优质
    简介:本文介绍了如何利用Shell脚本自动化创建多个系统用户的流程,提高管理员工作效率。通过编写和执行简单的脚本命令,可以快速、安全地批量添加新用户到Linux系统中。 以下是一个用于创建用户的Shell脚本示例: ```bash #!/bin/bash for name in tom joy john mark james; do useradd $name echo redhat | passwd --stdin $name done ``` 执行该脚本后,将自动为用户tom、joy、john、mark和james创建账户,并且所有用户的密码都将设置为“redhat”。此Shell脚本使用了`useradd`命令来添加新用户,利用`echo`与`passwd --stdin`组合通过标准输入管道(|)修改用户的密码。同时,它还运用了for循环结构。 另外一种实现方式是将用户名和对应的初始密码保存在一个文件中,并通过awk读取这些信息然后执行相应的操作。
  • 使Shell进行户添加
    优质
    简介:本文介绍如何利用Shell脚本实现Linux系统中用户的批量创建,提高管理效率和减少人为错误。 在Linux系统管理中,Shell脚本是一种非常实用的自动化工具,尤其适用于执行重复性任务如批量创建用户。本段落将深入探讨如何利用Shell脚本来实现批量添加用户,并讨论相关技术点。 我们需要了解`useradd`命令,这是用于创建新用户的Linux工具。其基本语法为`useradd [选项] 用户名`,会自动建立一个新的系统账户,并配置相应的主目录和环境变量等信息。在我们的示例中,使用了`useradd $name`来创建名为$name$的新用户。 接下来是`passwd`命令,用于设置或修改用户的密码。通过执行`passwd --stdin $name < redhat`可以将redhat作为标准输入传递给`passwd`, 从而为$username$设定密码。这里使用的--stdin选项允许我们使用管道或者重定向来传输密码,避免在脚本中直接显示明文的密码,提高安全性。 为了批量处理用户创建任务,在脚本里我们可以利用for循环遍历一个预设的名字列表:`for name in tom joy john mark james; do useradd $name && echo redhat | passwd --stdin $name; done` 管道符号(|)是Shell编程中的关键元素,它允许将前一命令的输出作为后续命令的输入。例如,在这个上下文中,`echo redhat | passwd --stdin $username`会把字符串redhat传递给passwd指令用于设置用户名为$name$的用户的密码。 除了上述基础方法之外,我们还可以通过读取一个包含用户信息和对应密码文件(如accounts.txt)来扩展脚本。该文本段落件中每行包括一对空格分隔的用户名及其对应的初始密码。使用`awk`命令可以方便地处理这个列表: ```bash #!binbash while read -r username password; do useradd $username echo $password | passwd --stdin $username done < accounts.txt ``` 在此扩展版本中,我们利用了read命令从accounts文件逐行读取数据。`-r`选项防止反斜杠转义的问题。然后通过while循环将每一行为用户名与密码分别赋值,并执行相同的操作。 这种方式使得批量用户创建过程更加灵活且可控:不仅能管理大量用户的添加操作,还能确保每个账户的安全性设置符合要求。这对于需要快速部署多用户环境的大型系统来说非常实用。在实际应用中,还可以根据具体需求加入更多逻辑处理步骤,比如检查用户名是否已存在、验证密码强度等措施来提升脚本的功能性和安全性。
  • 执行SHELL
    优质
    简介:该Shell脚本用于自动化执行一系列命令和任务,适用于需要频繁重复操作的场景,提高效率并减少人为错误。 批量运行程序的SHELL脚本可以根据执行命令进行个性化修改,仅供参考。