Cygrunsrv & autossh: способ встраивания удаленных команд в командную строку? - PullRequest
2 голосов
/ 30 декабря 2011

Я использую cygrunsrv и autossh в Windows XP, чтобы создать сервис, создающий туннель для удаленного сервера, но я также хочу создать другой туннель от удаленного сервера до другого сервера.

Я могу добиться этого с помощью командной строки:

autossh -M 5432 serverA -t 'autossh -M 4321 serverB -N'

но когда я хочу настроить его в cygwin через cygrunsrv, чтобы он работал как служба:

cygrunsrv -I TUNNEL -p /usr/bin/autossh -a "-M 5432 serverA -t 'autossh -M 4321 serverB -N'" -e AUTOSSH_NTSERVICE=yes -e AUTOSSH_POLL=20 -e AUTOSSH_GATETIME=30

Это не полностью работает. Служба правильно создает туннель для ServerA, но не отправляет команду autossh "autossh -M 4321 serverB -N" на ServerA. Я пытался избежать цитаты, но все мои усилия не имели никакого значения, и я не вижу ни одной команды, отправленной в журналах autossh.

Я думаю, что проблема связана с псевдотерминалом, который не создается через cygrunsrv.

Я хотел бы знать, есть ли способ исправить мою командную строку cygrunsrv, чтобы она работала, или мне следует рассмотреть другой подход?

1 Ответ

3 голосов
/ 30 декабря 2011

Лайонел, попробуйте удалить AUTOSSH_NTSERVICE=yes из вызова cygrunsrv. Как объясняет /usr/share/doc/autossh/README.Cygwin:

Настройка AUTOSSH_NTSERVICE = да в среде вызова ... изменить поведение [s] autossh на три полезных способы:

(1) Добавлять флаг -N к каждому вызову ssh, тем самым отключая оболочку доступ. Идея в том, что если вы работаете с AutoSH в качестве системы сервис, вы используете его для переадресации портов; это не имеет смысла запустить сеанс оболочки в качестве системной службы. (Если вы думаете, это рассуждение неправильно, пожалуйста, отправьте отчет об ошибке автору или сопровождающему Cygwin, и расскажите нам, что вы пытаетесь сделать.)

Несмотря на вышесказанное, может показаться, что у вас есть веская причина не желать -N (который подавляет выполнение команды) при вызове ssh вашей службой. Удаление AUTOSSH_NTSERVICE=yes должно позаботиться об этом. У него будет пара других мелких недостатков, но вы, вероятно, можете с этим жить. Прочитайте остальную часть README.Cygwin для деталей.

...