OpenSSH на Cygwin

У меня есть Linux-сервер (Ubuntu Server 13.04), который должен запускать задание в Windows 7 (с установленным cygwin) под определенной учетной записью пользователя. Я установил вход без пароля для доступа к машине Windows через openSSH.

Проблема, с которой я сталкиваюсь, заключается в следующем: когда я вручную ssh в машину Win7 и запускаю задание, все в порядке. Однако, когда я запускаю задание с помощью команды ssh winuser @ winmachine, я подключаюсь к машине Windows под привилегированным пользователем sshd cyg_server:

$ whoami
linuxuser
$ ssh winuser@Win7
$ whoami
winuser
$ exit
$ ssh winuser@Win7 "whoami; exit"
cyg_server
>> This should be 'winuser' too.

Почему это могло происходить? Я попытался снова запустить ssh-host-config, но безрезультатно. Я также не вижу, какие параметры могут повлиять на это в sshd_config.

Любая помощь приветствуется!


person dgrine    schedule 01.07.2013    source источник


Ответы (1)


У меня были аналогичные проблемы, когда я подключался к машине Cygwin с помощью SSH. Раньше у меня не было проблем со входом в систему, пока однажды я не заметил, что мой путь установлен неправильно. Я потратил много времени на воссоздание файлов конфигурации с помощью ssh-host-config только для того, чтобы найти свой ответ на странице руководства для ssh:

Если команда указана, она выполняется на удаленном хосте вместо оболочки входа.

Проблема заключалась в том, что псевдоним, который я использовал для подключения к машине, был изменен для автоматического подключения к сеансу экрана (screen -DR). Это означало, что если еще не было сеанса screen для подключения, screen не запускался как дочерний процесс оболочки входа пользователя и не унаследовал какую-либо соответствующую пользовательскую среду.

Когда вы предоставляете команду в качестве аргумента для ssh, результирующая команда запускается как процесс, запущенный cyg_server. Убедитесь, что команда SSH запускается как часть оболочки входа в систему, и это должно делать то, что вы хотите:

ssh winuser@Win7 "bash -l -c 'whoami; exit'"

Объяснение (со страницы руководства bash):

-c string If the -c option is present, then commands are read from string.
-l        Make bash act as if it had been invoked as a login shell.
person Anthony Geoghegan    schedule 02.07.2013
comment
Как-то я пропустил параметр -l в bash man. Но это сработало как шарм, большое спасибо! Тем временем я решил обойти это, перейдя в «службы» Windows и изменив логин службы «sshd» для использования моего пользователя. Это был просто взлом, потому что он связывает cyg_server, чтобы всегда использовать эту конкретную учетную запись пользователя, что подходит для моей настройки, но не является общим решением. - person dgrine; 06.07.2013
comment
Рад помочь. Это был неплохой взлом, но были бы проблемы, если бы команды оболочки требовали правильной установки переменных среды. - person Anthony Geoghegan; 08.07.2013