我必须在许多机器中的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
,它逐行包含每台机器。我可以逐行阅读这个文件并做上面的事情,但我不确定如何?
这对我来说只是一次练习,所以任何简单或简单的方法都应该没问题。我甚至可以在脚本中硬编码我的密码来完成这项工作。完成此任务的最佳方法是什么?
答案 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:安装机器,执行您想要的操作,卸载并传递给下一个。