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

我必须在许多机器上用hello world在特定的目录下创build一个文件functon.txt 。 这是我到目前为止手动逐一login到每个框中并创build文件。 该目录是由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台左右的机器上这样做。 有什么办法可以通过一些脚本来做这些事情吗? 我可以多次input密码,但如果必须的话,我不想手动login到这些盒子,手工完成所有其他步骤。

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

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

安装Ansible之后:

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

看看你是否可以ping通机器。 如果成功,则用两台机器尝试以下操作(仅用两台机器创建另一个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 :输入主机(s)
  • -m :模块
  • -a :模块参数
  • -u :用户
  • --ask-pass :询问用户密码
  • – 成为:成为另一个用户
  • --become-user :新用户
  • --ask-become-pass :请求成为用户密码

您可以使用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,你仍然可以发送命令与期望:

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

你可以使用sshfs:挂载一台机器,做你想做的,卸载并传递给下一个。