Я подозреваю, что ваша проблема связана с запросом пароля от sudo
, идущим на псевдотерминал, указанный вашим ssh -tt
(который не является настоящим терминалом). Я избегаю sshpass и никогда не устанавливаю его (это угроза безопасности), поэтому я не могу протестировать ваш скрипт.
Однако следующее будет работать.
- Сделайте вашу учетную запись s sh частью группы
docker
sudo usermod -a -G admin docker
Кстати, вместо использования учетной записи «admin» было бы намного безопаснее создать специальную учетную запись для входа (обслуживание) на вашем linux ящик, который может выполнять только необходимые административные задачи.
Используйте следующий скрипт
mogo()
{
ssh -T -q -o StrictHostKeyChecking=no admin@192.168.10.145 <<SSH_EOF
docker exec -it \$(docker ps --filter name=mongo --format "{{.Names}}") bash -c "mongodump -d saas -u $MGO_USER -p $MGO_PWD -o md1/"
logout
SSH_EOF
touch /home/admin/11jul20
}
Обратите внимание, что нет необходимости в псевдотерминале, поэтому мы отключим его (-T
). Я бы также посмотрел, чтобы не отключать StrictHostKeyChecking
.
3. Задайте env.
Храните пароли и другие секреты как переменные среды ( 12 факторов ), никогда в ваших сценариях. Это минимум.
Например, в ваш скрипт heredo c будет вставлено следующее:
ВАЖНО убедитесь, что вы не используете одинарные кавычки вокруг SSH_EOF
, иначе var замена не производится.
export MGO_USER=abc
export MGO_PWD=abc123
Docker также имеет секреты хранилище и другие хранилища с открытым исходным кодом доступны, но с большей сложностью.
Вызовите ваш сценарий резервного копирования
mgo