Не так решение как несколько самородков совета, который может быть полезным для рассмотрения при использовании tar
/cpio
/rsync
и т.д. Во-первых, это могла бы быть хорошая идея скопировать от связывания, монтируются Вашей исходной файловой системы (mount --bind source mntdir
). Это будет иметь подобный эффект как --one-file-system
опции к rsync
и tar
и -xdev
с find
. Это имеет преимущества работы, если эти опции недоступны (возможно, из-за старой версии, хотя примечание, которые связывают монтирование, было представлено в Linux 2.4), и файлы разрешения под точками монтирования, которые будут сохранены, который может быть желательным в некоторых случаях.
Во-вторых, я советовал бы для использования числового uids и ценурозов где возможный (--numeric-owner
для tar
, --numeric-ids
для rsync
и --numeric-uid-gid
для cpio
). Если Вы восстанавливаете резервное копирование без этого, и владелец/группа больше не существует, или uid/gid отличается (это может произойти особенно, если живой диск используется для восстановления резервного копирования), у Вас может быть один набор uids/gids, используемого при восстановлении, которые становятся недопустимыми после /etc/passwd
и /etc/group
восстанавливаются.
Кроме того, смотрите на clonezilla. Методы, которые они используют, чтобы сделать объем резервного копирования, не могут быть полезны для Вас, но когда это работает, имеет опции скопировать секторы/таблицы разделов начальной загрузки и поддерживает и MBR и GPT, таким образом, могут быть некоторые сценарии там, которые могут копироваться/адаптироваться в Ваши цели.
Как заключительные 2 цента, я рассмотрел бы rsync
быть стандартным способом сделать это. Это - конечно, наиболее эффективный способ при выполнении возрастающих резервных копий, хотя не так для того от полного резервного копирования. Несомненно, это не повсеместно, но я думаю, что это - ошибка не включать его в выпуск сервера дистрибутива. Это может уже быть установлено на всех Ваших серверах.
Две вещи:
использовать ~/.ssh/authorized_keys
на username@74.11.11.11
для удаленного входа, без интерактивного пароля, вместо того, чтобы иметь пароль в командной строке с клиентской машины. Это также позволит запускать задание автоматически через cron или что-то еще.
настраиваем /etc/sudoers
на удаленной машине 74.11.11.11
, чтобы разрешить выполнение команды от имени пользователя root, пользователем, который подключается, в данном случае: username
.
Таким образом, в вашем примере, /etc/sudoers
на 74.11.11.11
позволит пользователю username
выполнить mkdir
, как root
без пароля.
Если вы пробовали это сделать, и это не работает, выполните man sudoers
.
Как правило, ИЗБЕГАЙТЕ использования sshpass с паролем.
Все, что вы написали, могут быть просмотрены другими пользователями с помощью команды ps, и это ДОЛЖНО вас беспокоить.
Вторая проблема здесь. Я не вижу, чтобы вы указали параметр -t . Это означает, что у вас отключено
Defaults requiretty
в вашем / etc / sudoers, что может иметь последствия для безопасности.
Если вы все еще настаиваете на использовании sshkeypass, попробуйте:
sshpass -p "password" ssh -qt username@74.11.11.11 "su -lc 'mkdir temp/'"
Вы можете легко настроить генерацию ключа ssh только для выполнения этой работы, а затем удалить его.
ssh-keygen -t rsa
Следуйте инструкциям на экране,
ssh-copy-id user@server1
Или вы также можете сделать:
cat ~/.ssh/id_rsa.pub | ssh user@server1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Помимо предложений не использовать sshpass
, можно оставить его «скрытым» от командной строки:
/etc/profile
и вставьте туда :export SSHPASS='my_pass_here'
-e
с командой sshpass
$ sshpass -e ssh usernmane@hosting.example 'ls -ll'
-f
:$ sshpass -f password_filename ssh usernmane@hosting.example 'ls -la'
Но лучшее решение — следовать @Hristo Mohamedпредложению:
In general please AVOID using sshpass with a password.
You can set up easily a generate ssh key just to do this job and then remove it.