2

Мне нужно ежедневно заходить на удаленный сервер и выполнять тот же набор задач. Я использую платформу Windows, а удаленный сервер - Unix. Я использую PuTTY для входа на удаленный сервер. Чтобы уменьшить ручную работу, мне нужно автоматизировать эту задачу.

Я попробовал этот код:

start putty.exe -ssh -load session -l username -pw password -m command.txt -t

command.txt содержит:

sudo su - user1 
ls 
cd directory

Работает только первая команда в command.txt а затем PuTTY ожидает ввода от пользователя.

Мне нужно, чтобы все команды запускались без ввода пользователя.

Вещи, которые имеют значение:

  • Я не пользователь root

  • Доступ предоставлен для переключения на user1 без пароля

  • У меня есть ограничение на использование только PuTTY (установка Plink не разрешена)

1 ответ1

2

Потому что команды, содержащиеся в command.txt , выполняются основной оболочкой один за другим.

Таким образом, мастер-оболочка выполняет sudo , ожидает его выхода, прежде чем продолжить работу с другими командами (ls и cd). И sudo не выходит (по крайней мере, сам по себе).

Пока вы хотите, чтобы ls и cd выполнялись в дочерней оболочке, выполняемой su .

Вы должны указать su для выполнения команд.

Это должно работать:

sudo su - -c "ls ; cd directory" user1

или это

echo "ls; cd directory" | sudo su - user1

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

Итак, вы хотите добавить оболочку в список команд:

sudo su - -c "ls ; cd directory ; /bin/bash" user1

или же

echo "ls ; cd directory ; /bin/bash" | sudo su - user1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .