bash - 在创建脚本以更新/etc/hosts 文件中的主机名时遇到多个问题?

标签 bash shell ssh sh

我们有大约 3000 台虚拟机和 450 台物理服务器,它们是基于 Linux 的服务器(当时很少有 ubuntu 从 9.x 开始,其中很少有 Susu 从 8.X 开始,其中大部分是 RHEL 从 4.x 开始直到7.4) 在所有这些上,我需要在它们各自的/etc/hosts 文件中添加一些带有 IP 详细信息的主机名条目。

我在每台服务器上都有不同的用户,我可以使用这些用户具有完整的 sudoers 访问权限 因此,我创建了一个包含主机名、用户名和密码格式的 CSV 文件。其中包含登录所需的详细信息。文件名为“hostname_logins.csv”

我需要上传一个文件(即 hostname_list 到每个服务器,然后在每个服务器主机文件中更新这些相同的详细信息。

我将使用一台 RHEL 6 服务器运行此脚本。 (所有其他主机都可以从此服务器解析并且可以访问,我已经确认过了。)

该脚本正在运行,但它要求接受主机 key 一次,还要求输入密码 2 次,但是第三次​​它不要求输入密码,我猜它会自动运行,但需要确保它不要求接受主机 key 或密码。:

#!/bin/bash
runing_ssh()
{
while read hostname_login user_name user_password
do ssh -vveS -ttq rishee:rishee@192.168.1.105 "sudo -S -ttq < ./.pwtmp cp -p /etc/hosts /etc/hosts.$(date +%Y-%m-%d_%H:%M:%S).bkp && sudo -S bash -c 'cat ./hostname_list >> /etc/hosts' && rm -f ./.pwtmp ./hostname_list"
done < hostname_logins.csv
}

while read hostname_login user_name user_password
do  echo $user_password > ./.pwtmp
    cat ./.pwtmp
    scp -p ./.pwtmp ./hostname_list $user_name@$hostname_login:
    runing_ssh
done < hostname_logins.csv

我需要把它做成一个脚本,它可以在所有这些服务器上运行。提前致谢。

最佳答案

您正在使用 sudo 从/tmp 执行原始副本,但没有别的。

while read hostname_login user_name user_password
do  echo $myPW >.pwtmp
    scp -p ./.pwtmp ./hostname_list $user_name:$user_password@$hostname_login:
    ssh -etS $user_name:$user_password@$hostname_login "sudo -S <.pwtmp cp -p /etc/hosts /etc/hosts.bkp && sudo -S <.pwtmp cat ./hostname_list >> /etc/hosts && rm -f ./.pwtmp ./hostname_list"
done < hostname_logins.csv

我放弃了显式发送到/tmp 和 cp 回到你的主目录,并通过不在冒号后将任何东西传递给 scp 来默认位置(到 $user_name 的主目录)。如果它对您不起作用,请修复它。

我创建了一个密码文件以提高安全性和代码重用性,并将其与主机列表一起发送。我在每个相关命令中添加了一个 sudo -S,从密码文件中读取。

[bash -c ...] 语法在我的实现中不起作用,所以我把它去掉了。

希望对您有所帮助。

Update

添加 -t 到 ssh 调用。试试看。

关于bash - 在创建脚本以更新/etc/hosts 文件中的主机名时遇到多个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807173/

相关文章:

string - 删除变量开头和结尾的子字符串匹配模式

linux - 在 bash 脚本中将列转换为行

shell - Oozie 工作流 : is it possible to get environment variable value through EL function

php - echo exec 工作但不执行

从 bash 脚本中克隆 Git

python - 带有远程ssh解释器的pycharm中的matplotlib

linux - 在顺序编号的目录之间插入新的编号目录

python - bash/Python : does `echo` command insert a newline when acting as input to another command?

linux - grep 并发现在 shell 脚本中不起作用

macos - 尝试安装 Hadoop - 出现权限被拒绝错误