когда я запускаю следующую команду как обычный пользователь, все работает правильно:
fabio@myclient:~$ rsync -rv myserver:~/backup /home/fabio/backup/
Он работает без какого-либо взаимодействия с пользователем, но мне нужно запустить скрипт, выполняемый от имени root, поэтому я попробовал:
root@myclient:~# sudo -u fabio rsync -rv myserver:~/backup /home/fabio/backup/
и также пробовал:
root@myclient:~# su - fabio -c "rsync -rv myserver:~/backup /home/fabio/backup"
оба варианта работают, но если у меня спрашивают «парольную фразу для ключа», можно ли этого избежать?
решение1
«Парольная фраза для ключа», скорее всего, исходит от SSH, а не от rsync
или sudo
, который запрашивает пароль для разблокировки вашего закрытого ключа SSH.
Поскольку я действительно не рекомендую вам использовать ключ без парольной фразы, рассмотрите обстоятельства, при которых скрипт запускается как root. Всегда ли скрипт запускается как root после того, как вы входите в систему? Вас устраивает ввести парольную фразу один раз после того, как вы входите в систему?
Если это так, я бы рекомендовал использовать что-то вродеkeychain
чтобы убедиться, что ssh-agent, запущенный как ваш пользователь, используется скриптом, пока он запущен как root. Вы можете настроить это так, чтобы вам нужно было ввести парольную фразу только один раз после входа в систему, и любые будущие вызовы не потребуют никакого взаимодействия.
Если это не так, если скрипт должен запускаться автономно без какой-либо интерактивной аутентификации с вашей стороны, рассмотрите возможность создания пары ключей специально для скрипта резервного копирования, а затем ограничения его возможностей, либо заставив его аутентифицироваться как другой пользователь на удаленной стороне (т. е. не fabio
, а, например, fabio-backup
), либо ограничив его аргументом command=
в вашем .authorized_keys
файле на удаленной стороне (хотя это немного сложнее, так как требует просмотра SSH_ORIGINAL_COMMAND
переменной среды; см.авторизованные_ключи(5)для подробностей)
решение2
Ваш закрытый ключ ssh защищен парольной фразой. Когда вы запускаете его вручную как (вошедший в систему)пользователь, он использует ssh-агент, где вы когда-то хранили парольную фразу.
Однако при запуске без присмотра этого не происходит — в конце концов, пользователь может даже не войти в систему (и, следовательно, его хранилище ключей недоступно). Чтобы это всегда работало, вам нужно удалить парольную фразу из вашего закрытого ключа ssh (через ssh-keygen -p
вход в систему как пользователь fabio
— просто нажмите Enter для получения нового пароля, и он должен быть удален).
Небольшое замечание по безопасности: если закрытый ключ не защищен парольной фразой, любой, кто получит доступ к fabio
учетной записи, также сможет подключиться по SSH к другим хостам, используя этот ключ, без необходимости предварительно прослушивать парольную фразу пользователя.