Рейтинг:0

Копирование файлов в защищенный каталог на удаленном сервере

флаг ru

Я работаю над сценарием, которому нужно скопировать некоторые файлы с локального компьютера в каталог на удаленном сервере. Проблема, с которой я сталкиваюсь, заключается в том, что каталог (/etc/init.d) принадлежит пользователю root, поэтому я получаю исключения из разрешений, если пытаюсь скопировать в него файлы. Это означает, что я не могу использовать scp, не войдя в систему как пользователь root.

Самое близкое решение, которое я нашел до сих пор, это этот ответ: https://askubuntu.com/a/872537/798391 . К сожалению, данный ответ не совсем работает, и ни одно из предложений, приведенных в комментариях, похоже, не исправляет его. Если я побегу

кот myscript.sh | ssh foo@myserver "sudo tee -a /etc/init.d/myscript.sh"

я получаю ошибку

sudo: нет tty и не указана программа askpass

В одном из комментариев предлагалось добавить -t к команде ssh.

кот myscript.sh | ssh -t foo@myserver "sudo tee -a /etc/init.d/myscript.sh"

но это привело к ошибке

Псевдотерминал не будет выделен, потому что stdin не является терминалом.

Другим предложенным вариантом было использование аргумента -S команды sudo.

кот myscript.sh | ssh foo@myserver "sudo -S tee -a /etc/init.d/myscript.sh"

Это, по крайней мере, запрашивает пароль, но время ожидания истекает, и он запрашивает снова, прежде чем пароль можно будет ввести полностью.

На данный момент у меня нет идей.Есть ли способ заставить эту команду работать? Есть ли лучшее альтернативное решение для копирования файлов в защищенное удаленное место?

Рейтинг:0
флаг cn
raj

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

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

Другой метод заключается в использовании ожидать написать сценарий, который интерактивно регистрируется через ssh на удаленной машине, делает судо -я (и вводит соответствующий пароль), а затем копирует файл, выполняя SCP в обратном направлении (т. SCP выполняется на удаленном сервере по отношению к вашей локальной машине - на нем должен быть активен сервер ssh).

Решение, которое, вероятно, ближе всего к тому, что вы изначально пробовали, заключается в следующем:

  1. подготовить сценарий (назовем его /tmp/пароль) следующего содержания:

     #!/бин/ш
     эхо-пароль
    

    куда пароль это фактический пароль для пользователя фу на удаленном сервере.

  2. chmod 700 /tmp/пароль чтобы файл был исполняемым и никто, кроме владельца, не мог получить к нему доступ

  3. скопируйте файл (с сохранением разрешений) на удаленный сервер с помощью scp -p /tmp/пароль foo@myserver:/tmp

  4. используйте следующую команду:

     кот myscript.sh | ssh foo@myserver "SUDO_ASKPASS=/tmp/пароль sudo -A tee -a /etc/init.d/myscript.sh"
    
флаг ru
У меня настроена аутентификация на основе ключей, по крайней мере, я так думаю. Я не совсем уверен, как это поможет, поскольку мне все равно нужно будет запустить команду копирования с повышенными разрешениями на удаленном сервере и, следовательно, все равно нужно будет указать пароль.
raj avatar
флаг cn
raj
@pbuchheit Можете ли вы сделать `ssh root@myserver`? Я имел в виду настройку аутентификации по ключу, чтобы вы могли это сделать.
флаг ru
Нет. На самом деле я не хочу входить в систему как пользователь root.
raj avatar
флаг cn
raj
@pbuchheit Итак, попробуйте решение, которое я описал.
флаг ru
какое решение? Использование expect недопустимо; другие члены команды должны иметь возможность запускать этот скрипт без дополнительных библиотек. Добавление файла с паролем на удаленный сервер кажется излишним. У меня уже настроена аутентификация по ключу.
raj avatar
флаг cn
raj
@pbuchheit Может быть, попробуйте это, прежде чем комментировать, что «это кажется излишним». Этот файл используется для предоставления пароля для sudo (не для ssh), чтобы он не запрашивал его у вас. Вы спросили: «Есть ли способ заставить эту команду работать?». Я дал вам ** проверенный ** ответ, но вы говорите, что не хотите его пробовать - тогда это ваши проблемы.

Ответить или комментировать

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