Rsync по SSH, получающему tty подарок

Нет просто протокол или HTTP или TCP в это время. С HTTP можно определить "Путь Ping", который может указать на файл на веб-сервере для проверки не, только веб-сервер и выполнение, но и ожидаемая страница в рендеринге, но это - в основном это. Пороги, тайм-ауты и интервалы все настраиваемы, но снова только для протоколов TCP и HTTP.

6
задан 29 August 2013 в 06:06
4 ответа

Иногда ты слишком много думаешь о вещах.

Rsync не был установлен в удаленной системе.

/ facepalm

6
ответ дан 3 December 2019 в 00:18
  1. Вам не нужно sudo , если задание cron выполняется как root.
  2. Там целая куча ненужных флагов: -rlptgoD ; удалите и замените на -a .
  3. Сообщение TTY от sudo предназначено для локального TTY, тогда как параметр -t для ssh предназначен для удаленный TTY. Не путайте их.
  4. Разве -v и -q не противоречат друг другу?
  5. Последнее, о чем вы беспокоитесь, - это то, зашифрован ли локальный закрытый ключ SSH или нет. Первые не могут использоваться с автоматическими запусками (например, те, где stdin не является TTY; они не запускаются из терминала или эмулятора терминала).

EDIT / UPDATE :

  • ] Я возвращаю 1 и 2.
  • 3 должно означать отсутствие локального TTY, когда cron работает, а SSH не выделяет его удаленно, так как локального нет.
1
ответ дан 3 December 2019 в 00:18

Я предполагаю, что это проблема с ключом ssh. Либо закрытый ключ резервной копии имеет парольную фразу, либо открытый ключ отсутствует в цепочке ключей удаленных пользователей. Может быть, ваша предыдущая попытка использовала ключ, который уже был загружен в вашу связку ключей?

0
ответ дан 3 December 2019 в 00:18

Помещаю это здесь, чтобы я мог вспомнить и поделиться этим трюком:

rsync -av -e "ssh -tt" --rsync-path="stty raw -echo; sudo /usr/bin/rsync"   user@${HOSTNAME}:/ ${DEST_DIR}

Этот метод, похоже, обходит требование для tty, которое применяется по умолчанию в некоторых системах / etc / sudoers файл с По умолчанию requiretty . Эта информация была создана после просмотра этого SO-вопроса и ответов .

В этом ответе они рекомендуют удалить Defaults requiretty из / etc / sudoers . Это более простой способ. Однако, если вы не можете изменить удаленный хост / etc / sudoers , чтобы удалить этот параметр конфигурации, вы можете попробовать заставить локальный rsync использовать ssh -tt ]. Эта опция для ssh описана на странице руководства клиента ssh следующим образом:

Принудительное выделение псевдотерминала. Это можно использовать для выполнения произвольных экранных программ на удаленном компьютере, что может быть очень полезно, например при реализации услуг меню. Несколько опций -t принудительно выделяют tty, даже если ssh не имеет локального tty.

Таким образом, мы заставляем ssh выделить псевдотерминал, чтобы избежать ошибки:

Pseudo-terminal will not be allocated because stdin is not a terminal.
stty: standard input: Inappropriate ioctl for device
sudo: sorry, you must have a tty to run sudo

Затем - rsync-path заменяется командой, выполняющей следующие действия:

stty raw -echo; sudo /usr/bin/rsync

stty raw -echo - устанавливает линейную дисциплину удаленного терминала как сквозную. Это фактически заставляет его вести себя как канал, который будет использоваться вместо псевдотерминала без -tt .

Тогда удаленная команда rsync будет sudo / usr / bin / rsync , который теперь имеет псевдотерминал и будет проходить проверку requiretty для sudo .

2
ответ дан 3 December 2019 в 00:18

Теги

Похожие вопросы