Копирование нескольких файлов на несколько клиентов

В качестве примера входного файла:

$ cat client_23.xml 
<world>
    <hello>collect_model = 1</hello>
    <hello>enable_data = 0</hello>
    <hello>session_ms = 2*60*1000</hello>
    <hello>max_collect = string_integer($extract("max_collect"))</hello>
    <hello>max_collect = parenting(max_collect, max_collect, 1.0e99)</hello>
    <hello>output('{')</hello>
</world>
<derta-config>
    <data-users>2000</data-users>
    <test-users>2000</test-users>
    <attributes>hello world</attributes>
    <client-types>Client1</model-types>
    <target>price.world</target>
</derta-config>

Мы можем внести оба изменения, используя:

$ sed 's|<hello>collect_model = 1</hello>|<hello>collect_model = 0</hello>|; \|<derta-config>|,\|</derta-config>|d' client_23.xml 
<world>
    <hello>collect_model = 0</hello>
    <hello>enable_data = 0</hello>
    <hello>session_ms = 2*60*1000</hello>
    <hello>max_collect = string_integer($extract("max_collect"))</hello>
    <hello>max_collect = parenting(max_collect, max_collect, 1.0e99)</hello>
    <hello>output('{')</hello>
</world>

Как это работает

У нас есть две команды sed. Первый - замена, второй - удаление:

  • s | collect_model = 1 | collect_model = 0 |

    Команды замены имеют вид s | старый | новый | . Итак, здесь старый - это исходный collect_model = 1 , а новый - это замена collect_model = 0 < / привет> .

  • \ | |, \ | | d

    Определяет диапазон строк. Начальная строка содержит derta-config> , а конечная строка содержит . Все строки в этом диапазоне удаляются командой удаления d .

1
18.04.2018, 12:05
2 ответа

Выяснилось, что в моем случае лучшим способом было сгенерировать.pem на сервере, куда я хотел развернуть файлы.

На сервере (ВМ в моем случае):

1- generate ssh key : ssh-keygen -t rsa -b 2048

2- cat keyName.pub >>.ssh/authorized_keys

3- chmod 600.ssh/authorized_keys

4- create pem file : openssl rsa -in id_rsa -outform pem > id_rsa.pe

На клиенте:

 1- get pem file

 2- chmod 400 id_rsa.pem

 For Testing Purpose :
 3- ssh -i id_rsa.pem <user>@<host> 

В моем случае я использую Java для развертывания файлов, поэтому я использовал sshjдля отправки файлов с помощью newSCPFileTransfer()библиотеки sshj.

0
27.01.2020, 23:43

Лучше всего написать сценарий или использовать Ansible. Оба требуют ssh. См. документацию Ansible здесь и Простое руководство Ansible на tutorialspoint

1
27.01.2020, 23:43

Теги

Похожие вопросы