Добавить строку, используя Sed на удаленной системе

Я пытаюсь добавить PS1 в файл /etc/profile удаленной системы. Теперь я должен добавить эту строку на более чем 70 серверах, поэтому используя ssh я добавлю эту строку PS1 на всех серверах. Но когда я пытаюсь отправить PS1, он зависает, и я должен убить команду

Это команда

 ssh -v admin@remserv "sed '/002/a \ PS1=" \[\e[31m\]\n------------------------------------------------------------------------------------------------------------------------------ \n\n[\u@\h \W]\\$ - \# \[\e[0m\] " /etc/profile' " 

введите описание изображения здесь

Что мне здесь не хватает?

Команда отредактирована на основе предложения

 > ssh -vt admin@remserv printf "%s\n" "sudo sed -i.bak '/002/a \ > PS1=" > '\[\e[31m\']'\'n------------------------------------------------------------------------------------------------------------------------------ '\'n'\'n'[\u@\h \W']'\\'$ - '\'# '\[\e[0m\'] " /etc/profile' " 

  • Удаленный ПК, доступный с помощью ssh, scp / rsync, не работает (больше)
  • Порт открыт, но я не могу ssh к нему
  • Как экспортировать функцию в bash через ssh?
  • Учетные записи дросселя после неудачных попыток входа в систему SSH
  • Тема zsh не работает на удаленном сервере
  • Как заблокировать SSH Brute Force через Iptables и как это работает?
  • Имея ssh-туннелирование для удаленного доступа с третьей машины
  • Как перенести файл из окон на Unix-машину
  • 2 Solutions collect form web for “Добавить строку, используя Sed на удаленной системе”

     ssh ... "sed '/002/a \ PS1=" \[\e[31m\]\n--...- \# \[\e[0m\] " /etc/profile' " ^ ^ ^ ^ 

    У вас две кавычки без кавычек внутри указанной строки, они будут удалены оболочкой (на локальной стороне ssh-соединения). Кроме того, внутренние одинарные кавычки, похоже, охватывают как команду sed и имя файла, поэтому после того, как удаленная оболочка обрабатывает цитирование, sed получит один аргумент с /002/a \ ... /etc/profile . Это фактически показывает вывод ssh в вашем изображении.

    (Ну, по крайней мере, это то, что приходит на ум, проблемы с двойным цитированием не очень хорошо работают с моим мозгом, по крайней мере, без кофе.)

    Вы должны уметь отлаживать это, запустив что-то вроде

     ssh somewhere printf '"%s\n"' "sed '/002/... /etc/profile' " 

    printf будет печатать аргументы, которые он получает, по одному в каждой строке, поэтому легче увидеть, где строка фактически разделена (эхо будет объединено с пробелами, поэтому foo , bar будет выглядеть так же, как foo bar ). Двойные кавычки в строке формата, чтобы сохранить обратную косую черту на пульте дистанционного управления.

    Хорошо решить это, используя символы «\»

    Правильная команда

     for i in `cat serverslist`; do ssh -t admin@$i "sudo sed -i.bak '/002/a \ PS1="\" '\\'['\\'e[31m'\\']'\\n'------------------------------------------------------------------------------------------------------------------------------ '\\'n'\\'n['\\'u@'\\'h '\(''\\'W'\)']'\\''\\'$ - '\\'# '\\'['\\'e[0m'\\'] \"" ' /etc/profile " ;done ; 
    Interesting Posts

    Как установить Fedora & Ubuntu с зашифрованными VG на одном диске?

    Создание списка альтернативных пакетов с помощью apt-инструментов

    Совместное использование псевдонимов и настроек PATH между zsh и bash

    Чрезвычайно высокая загрузка процессора и отставание от 3D-ускорения в Linux Mint (Virtual Box), но не с программным рендерингом

    Получение конкретной линии с вывода терминала

    Помещение предупреждающего флага на определенную версию

    Как выполнить одну и ту же команду linux одновременно в нескольких вкладках / оболочках?

    Использование sed для замены специальных символов

    черный экран при подключении к серверу xrdp

    Как удалить последнюю запятую каждой строки csv с помощью linux

    wget – Как загрузить веб-страницы на основе шаблона URL?

    Библиотека заявок Yum установлена, но это не

    Default-Start не содержит уровней запуска

    как использовать rpmbuild для el5 на системе el6

    Странное поведение исполнителя

    Linux и Unix - лучшая ОС в мире.