Скопируйте файл и перезапишите существующий файл.

У меня есть два изображения (image1.png и image2.png) в той же папке на моем сервере, я хочу запустить команду, которая перезаписывает image2.png в image1.png. Я предпочитаю перезаписывать изображение вместо его удаления, а затем заменять его другим. Как я могу достичь этого через командную строку ssh?

  • Как gzip и копировать файлы, сохраняя свою структуру каталогов?
  • Как копировать и перемещать последовательное подмножество файлов?
  • Найти и заменить все те же файлы между 2 каталогами
  • Это UUOC (бесполезное использование кошки) для перенаправления одного файла на другой?
  • Перемещение файлов между Linux и OpenBSD и сохранение свойств файла
  • Как клонировать весь диск на больший диск и затем разгружать?
  • Почему режим cp --no-preserve = сохраняет режим? Доступны альтернативные инструменты?
  • Является ли rsync самым быстрым и надежным способом проверки идентичности каталогов?
  • 3 Solutions collect form web for “Скопируйте файл и перезапишите существующий файл.”

    ssh host "cd path/to/directory && cp image1.png image2.png" 

    && безопаснее, чем ; в случае сбоя cd , например, из-за опечатки: в таком случае cp не будет выполняться вместо возможного копирования неправильного файла.

    Без sudo команда ssh server "cd path/to/directory && cp image1.png image2.png" не имеет привилегий для chmod разрешений.

    Но с sudo это было бы, но после запуска ssh он никогда не вводит пароль для него на удаленном сервере, поэтому решение использует -S и передает пароль для sudo следующим образом:

    ssh server " cd path/to/directory && echo sudo_password | sudo -S chmod 600 image2.png && cp image1.png image2.png"

    РЕДАКТИРОВАТЬ:

    Однако, как отмечалось в @terdon, нам не нужно изменять разрешения здесь, но используйте sudo cp , поэтому он приходит к:

    ssh server " cd path/to/directory && echo sudo_password | sudo -S cp image1.png image2.png"

    или (в случае, если вы считаете, что ваш пароль может быть прочитан)

    ssh server -t " cd path/to/directory && sudo cp image1.png image2.png"

    UPDATE: также @terdon предупредил, и я добавил это, потому что считаю важным подчеркнуть и сделать акцент на такой возможной реализации:

    Я действительно удалю это предложение использования -S, оно не нужно и очень опасно (см. Комментарии @ mikserv и мой ответ). Это также бессмысленно. Единственное «преимущество», о котором вы говорите, это возможность использовать трубку, а в большинстве ситуаций вы можете просто направить на сервер. Вы также можете использовать sshpass, как вы предложили, или настроить sudo без пароля. Всевозможные способы, которые не хранят пароль сервера как открытый текст. – тердон

    С одной стороны, это хорошо для автоматизации, не получив пароль sudo password promts и, чтобы полностью автоматизировать код / ​​скрипт, вы должны добавить sshpass -p password ssh...

    Однако на сервере, где другие могут легко прочитать ваш пароль sudo, предоставленный в качестве открытого текста во время сеанса ssh который не рекомендуется с точки зрения безопасности. Итак, чтобы получить sudo с ssh и быть безопасным использованием ssh -t

    ssh -t server "cd path/to/directory && sudo chmod 600 image2.png && cp image1.png image2.png"

    Тем не менее, с -t невозможно ssh "sudo command"| command например, ssh -t server "cd path/to/directory && sudo"|grep "text" но это возможно с использованием файла -S и эхо-пароля, например ssh server 'echo password | sudo -S ls -l'| grep 'a' ssh server 'echo password | sudo -S ls -l'| grep 'a'

    Чтобы подключиться к серверу через ssh и запустить определенную команду, все, что вам нужно, это ssh "command"

    В вашем случае вы хотите скопировать файл (он перезаписывается по умолчанию), поэтому вам нужна команда cp . Он работает как cp /path/to/original /path/to/copy . Теперь вы сказали в своих комментариях, что при попытке это дает вам отказ в разрешении. Это означает, что вам нужно будет запустить команду как root. Это делается с использованием sudo , поэтому sudo cp /path/to/original /path/to/copy .

    Следующая проблема заключается в том, что ssh запускает неинтерактивную оболочку без tty, поэтому sudo не может запрашивать пароль. Для этого вам нужно использовать ssh's -t . Итак, все это вместе, вы можете сделать:

     ssh -t user@server sudo cp /path/to/image2.png /path/to/image1.png 

    Никогда не повторяйте свой пароль sudo как было предложено другим ответом. Это чрезвычайно опасно, так как это сделает его видимым для всех пользователей, подключенных к системе, и оно также будет храниться в вашем файле истории в виде обычного текста. Это означает, что все, что мне нужно сделать, это grep sudo ~youruser/.bash_history и у меня есть ваш пароль и полный доступ к серверу. Таким образом, любой злоумышленник, который получает доступ к серверу, теперь может делать все, что им нравится.

    Interesting Posts

    Какова реальная точка опции -f на rm?

    Как адрес ядра заменяет страницы памяти на swap partition \ file?

    Греп, чтобы найти правильную строку, sed, чтобы изменить содержимое, а затем вернуть его в исходный файл?

    как перемещать набор файлов в один слой

    Существуют ли какие-либо способы или инструменты для сброса кеша и буфера памяти?

    С awk, как вставлять число только для строк, начинающихся с «Toto», когда они находятся между определенной парой шаблонов

    Как я могу заставить свой Wi-Fi подключиться к каналу G-диапазона?

    Выключена на 1 год в GNU?

    Проверьте список IP-адресов в таблице маршрутизации и покажите, к какому gw / dev

    скрипт для проверки запущенных служб на определенных портах

    Отображение UID каталогов Active Directory для конкретных UID Unix

    Блокирование соединения Fedora FirewallD при отключении

    Почему ядро ​​не запускает init?

    Управление подсветкой дисплея вручную

    JAVA_HOME не установлен в скрипте при запуске с использованием sudo

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