Извлечь постороннее использование образов дисков:
hdiutil detach /dev/disk# -force
Я искал способ сделать, это также - наконец нашло путь.
ssh host "cd path/to/directory && cp image1.png image2.png"
&&
безопаснее, чем ;
в случае неудачи cd
, например, из-за опечатки: в таком случае cp
не будет выполнен вместо того, чтобы, возможно, скопировать неправильный файл.
Без sudo
команда ssh сервера "cd путь/к/директория && cp image1.png image2.png"
не имеет привилегий на chmod
разрешения.
Но с sudo
это было бы так, но будучи запущенным после ssh
, он никогда не получает пароль для него на удаленном сервере, поэтому решение заключается в использовании -S
и вводе пароля для sudo
следующим образом:
ssh сервер " cd путь/кд/каталог && echo sudo_password | sudo -S chmod 600 image2. png && cp image1.png image2. png"
EDIT:
Однако, как @terdon отметил, нам не нужно менять здесь разрешения, но используйте sudo cp
, так что дело доходит до:
ssh сервера " cd путь/к/каталог && эхо- 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, как вы предлагали или установили без пассандров. Всевозможные способы, которые не хранят серверный пароль в виде простого текста. - terdon
С одной стороны это хорошо для автоматизации без получения парольных сообщений sudo
и, чтобы иметь полностью автоматизированный код/скрипт, вы бы добавили sshpass -p пароль ssh...
.
Однако на сервере, где другие могут легко прочитать ваш sudo пароль, предоставленный в виде открытого текста во время сессии ssh
, что не рекомендуется с точки зрения безопасности. Итак, чтобы иметь sudo
с ssh
и быть безопасным использовать ssh -t
ssh -t сервер "cd путь/к/каталог && sudo chmod 600 image2.png && cp image1.png image2". png"
Тем не менее, с помощью -t
невозможно передать ssh "sudo command"| команду
, например ssh -t сервер "cd path/to/directory && sudo"|grep "text"
, но это возможно с помощью -S и эхо-пароля, д. g. ssh сервер '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 -t
. Итак, собрав все это вместе, вы можете сделать:
ssh -t user@server sudo cp /path/to/image2.png /path/to/image1.png
Не никогда никогда не повторять ваш пароль sudo
, как предлагается в другом ответе. Это чрезвычайно опасно, так как это сделает его видимым для всех пользователей, подключенных к системе, и он также будет сохранен в вашем файле истории в виде обычного текста. Это означает, что все, что мне нужно сделать, это grep sudo ~ youruser / .bash_history
, и у меня есть ваш пароль и полный доступ к серверу. Таким образом, любой злоумышленник, получивший доступ к серверу, теперь может делать все, что ему заблагорассудится.