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

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

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 и у меня есть ваш пароль и полный доступ к серверу. Таким образом, любой злоумышленник, который получает доступ к серверу, теперь может делать все, что им нравится.

  • Как скопировать очень большой видеофайл с ошибкой в ​​нем?
  • Как клонировать весь диск на больший диск и затем разгружать?
  • Архивировать старые файлы журналов архивирования, которые содержат дату
  • находить измененные файлы рекурсивно и копировать с каталогом, сохраняющей структуру каталогов
  • Найти и заменить все те же файлы между 2 каталогами
  • Копия USB висит некоторое время, когда достигает 100%
  • загрузить файл из Интернета на сервер с помощью SSH
  • Скопируйте файлы автоматически в пункт назначения сразу после создания
  • Как скопировать каталог и вложенные папки, но игнорировать определенные файлы в подпапке?
  • Непрерывная копия. Как скопировать файлы?
  • Как перенести файл из окон на Unix-машину
  • Interesting Posts

    почему я не могу пинговать Google со статическим IP-адресом?

    Поиск всех элементов массива в другом массиве?

    Как настроить рабочую станцию ​​для нескольких пользователей Linux и Windows?

    существует «двухфакторная аутентификация» для sudo, если не так, как это сделать?

    Как настроить среду рабочего стола Linux Mint на использование типа mime?

    Почему Plan 9 использует «snarf» вместо «copy»?

    Как я могу узнать, имеет ли ядро ​​«новый» конфиг?

    Получить контактную информацию системного администратора с терминала

    Выйти из Google Chrome с терминала

    Обнаружение сценария, вызвавшего неудачные соединения MySQL

    Команда для перечисления всех имен пользователей на сервере Linux

    Как узнать, есть ли я в тюрьме, контейнере, снимке и т. Д. Окружении?

    Сообщение об ошибке возвращает ошибку при попытке подключения к пользователю на другой машине

    Укажите псевдоним имени узла в / etc / hosts?

    Почему set-o errexit нарушает это выражение read / heredoc?

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