通过一些脚本在多台机器的目录下创建一个文件?

时间:2016-12-30 21:21:36

标签: linux unix ssh ansible ubuntu-14.04

我必须在许多机器中的functon.txt特定目录下创建一个文件hello world。这就是我到目前为止手动逐一登录每个框并创建文件。该目录由root拥有,因此我必须确保新文件也归root用户所有。

david@machineA:~$ sudo su
[sudo] password for david:
root@machineA:/home/david# cd /opt/Potle/ouyt/wert/1
root@machineA:/opt/Potle/ouyt/wert/1# vi functon.txt
root@machineA:/opt/Potle/ouyt/wert/1# ssh david@machineB

david@machineB:~$ sudo su
[sudo] password for david:
root@machineB:/home/david# cd /opt/Potle/ouyt/wert/1
root@machineB:/opt/Potle/ouyt/wert/1# vi functon.txt
root@machineB:/opt/Potle/ouyt/wert/1# ssh david@machineC

.....

现在我必须在大约200台机器上完成这项工作。有什么方法可以通过一些脚本来做这些事情吗?如果必须,我可以多次输入密码,但我不想手动登录这些包装盒并手动执行所有其他步骤。

我有一个文件hosts.txt,它逐行包含每台机器。我可以逐行阅读这个文件并做上面的事情,但我不确定如何?

这对我来说只是一次练习,所以任何简单或简单的方法都应该没问题。我甚至可以在脚本中硬编码我的密码来完成这项工作。完成此任务的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

安装Ansible后:

ansible -i /path/to/hosts.txt -m ping -u david --ask-pass all

查看是否可以成功ping通计算机。如果成功,则使用2台计算机尝试以下操作(仅使用2台计算机创建另一个txt文件并将其传递给-i选项)。然后你可以为所有机器运行它。如果该目录不存在,该命令将失败,您将在摘要中看到失败的计算机。

ansible -i /path/to/hosts.txt -m copy -a "src=/path/to/functon.txt dest=/opt/Potle/ouyt/wert/1/functon.txt" -u david --ask-pass --become --become-user root --ask-become-pass all

我没有测试过这个。所以要小心。

  • -i:输入主机
  • -m:module
  • -a:模块参数
  • -u:user
  • --ask-pass:询问用户密码
  • --become:成为其他用户
  • --become-user:新用户
  • --ask-become-pass:要求成为用户密码

答案 1 :(得分:1)

您可以使用expect自动执行SSH复制/ SSH登录:

#!/usr/bin/expect

set password  [lindex $argv 1]

spawn scp -P 22 [lindex $argv 2] [lindex $argv 0] 

expect "*password:*"
send -- "$password\r"
send -- "\r"

expect eof

expect命令将等待您在参数中提供的字符串。

您可以从hosts.txt遍历主机并为每个主机运行此脚本:

./create_config.sh david@machineA:/opt/Potle/ouyt/wert/1/ somePassword functon.txt

如果您没有可能进行SSH复制但只能使用SSH,您仍然可以发送带有expect的命令:

#!/usr/bin/expect

set password  [lindex $argv 1]

spawn ssh -p 22  [lindex $argv 0] 

expect "*password:*"
send -- "$password\r"
send -- "\r"

# expect the command prompt : change this if needed
expect "*$*" 

# execute some commands
send -- "echo 'some text to write to some file' > ~/some_file.txt\r"

# exit vm
send -- "exit\r"

expect eof

您可以使用以下命令运行:

./create_config.sh david@machineA somePassword

答案 2 :(得分:0)

您可以使用sshfs:安装机器,执行您想要的操作,卸载并传递给下一个。