Чтобы установить соединение SSH, клиент должен пройти аутентификацию на сервере. Вероятно, вы используете аутентификацию на основе ключей, когда ключ хранится в защищенном паролем файле и загружается в агент SSH. Клиент SSH знает, как найти агента через переменную среды SSH_AUTH_SOCK
. В задании cron или incron среда не такая, как в вашем интерактивном сеансе, она довольно минимальная, без SSH_AUTH_SOCK
, поэтому клиент SSH не может подключиться к удаленному компьютеру.
Если SSH-соединение не может быть установлено, Unison даже не начинает искать файлы для синхронизации, и ничего не записывается в unison.log
.
В стандартной ошибке скрипта есть сообщения об ошибках, но вы их нигде не записываете. Добавьте что-нибудь вроде exec 2> & 1 >> ~ / .unison-sync.log; дата
до начала вашего скрипта.
Чтобы SSH-соединение работало, вам нужно либо настроить для задания Unison доступ к вашему агенту, либо настроить ключ без пароля. Если вы хотите пройти через своего агента, см. Невозможно подключиться к удаленному компьютеру по ssh с помощью сценария оболочки в Crontab ; но тогда он будет работать только тогда, когда вы вошли в систему. Если вы хотите, чтобы синхронизация работала все время, ключ без пароля - единственное решение. Поскольку вы используете Unison и, следовательно, SSH как root, закрытый ключ должен находиться в /root/.ssh
, а не в вашей учетной записи. То же самое касается любой соответствующей опции в .ssh / config
.На стороне сервера вы можете авторизовать открытый ключ только для выполнения определенной команды unison с помощью директивы command =…
в .ssh / authorized_keys
(см. Создание учетной записи UNIX который выполняет только одну команду для примера). С ограничением команд, если кто-то получит доступ к локальной учетной записи root, он сможет выполнить только эту конкретную команду unison…
на host-2
; Я не знаю, можно ли заставить Unison таким образом выполнить произвольный код.
Скорее всего, ваши блоки памяти не могут быть отключены, потому что они содержат неперемещаемые страницы. Проверьте «съемный» атрибут sysfs.
Если вы используете обычную систему x86 -64 (, виртуализированную или «голое железо» ), весьма вероятно, что нет съемных блоков, потому что все выделения ядра неперемещаемы. Чтобы ограничить ядро какой-то частью оперативной памяти, передайте ему параметр «kernelcore =». После этого вы должны увидеть несколько съемных блоков памяти, и вы можете отключить их, написав «0» в атрибут «онлайн» или написав «оффлайн» в атрибут «состояние».