【问题标题】:getting multiple issues while creating a script to update hostnames in /etc/hosts file?创建脚本以更新 /etc/hosts 文件中的主机名时遇到多个问题?
【发布时间】:2018-03-30 03:36:30
【问题描述】:

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

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

我需要将文件(即主机名列表)上传到每个服务器,然后更新每个服务器主机文件中的相同详细信息。

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

脚本正在运行,但它要求接受主机密钥一次,还要求输入密码 2 次,但第三次它没有要求输入密码,我猜它自动工作,但需要确保它不要求接受主机密钥或密码。:

#!/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

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

【问题讨论】:

  • 在 while 循环之前执行 IFS=,因此您在读取命令期间正确拆分数据
  • 我真的推荐 ansible....

标签: bash shell ssh sh


【解决方案1】:

您正在使用 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 ...] 语法不适用于我的实现,所以我把它去掉了。

希望对您有所帮助。

更新

在 ssh 调用中添加了 -t。试试看。

【讨论】:

  • 我试过你的脚本,但这是我得到的错误
  • [root@node2 ~]# ./script1.sh ssh: connect to host rishee port 22: No route to host lost connection rishee:rishee@192.168.1.105's password: bash: .pwtmp : 没有这样的文件或目录 [root@node2 ~]#
  • 在读取主机名登录用户名用户密码时回显 $myPW > .pwtmp scp -p ./.pwtmp ./hostname_list $user_name@$hostname_login: ssh -eS $user_name:$user_password@$hostname_login "sudo - S <.pwtmp cp sudo cat .>> /etc/hosts && rm -f ./.pwtmp ./hostname_list" done
  • [root@node2 ~]# ./script1.sh rishee@192.168.1.105 的密码:.pwtmp 100% 1 0.0KB/s 00:00 hostname_list 100% 122 0.1KB/s 00 :00 rishee:rishee@192.168.1.105 密码: sudo: 对不起,你必须有一个tty才能运行sudo [root@node2 ~]#
  • 加上 uno 以获得技术支持(和有用的答案)。祝大家好运。
猜你喜欢
  • 2011-07-05
  • 2015-12-20
  • 1970-01-01
  • 2014-10-06
  • 2012-09-26
  • 2019-06-08
  • 1970-01-01
  • 2016-08-24
  • 2017-04-17
相关资源
最近更新 更多