При попытке подключиться к SSH-серверу с помощью PuTTY я получаю сообщение об ошибке:

/bin/bash: Operation not permitted

И тогда я получаю окно с сообщением:

Connection closed by remote host

Сегодня это начало происходить неожиданно, и я понятия не имею, почему раньше SSH-соединение работало нормально.

В чем причина этой ошибки, и есть ли способ ее исправить?

Редактировать: сервер является Windows, а не Linux, и на нем работает sshd Cygwin. Также я нашел этот пост, который я думаю, может быть актуальным - https://cygwin.com/ml/cygwin/2016-03/msg00097.html

5 ответов5

3

Я потратил много времени, пытаясь решить ту же проблему. Случайно наткнулся на решение здесь:

https://cygwin.com/ml/cygwin/2015-08/msg00162.html

На сервере Cygwin:

  1. Перейдите в Панель управления> Администрирование.
  2. Выберите Локальная политика безопасности> Локальные политики> Назначение прав пользователя.
  3. Щелкните правой кнопкой мыши по Заменить токен уровня процесса и выберите Безопасность или Свойства.
  4. Нажмите кнопку Добавить, чтобы добавить учетную запись, в которой запущен sshd. (cyg_server в моем случае)
  5. GPUpdate
  6. Перезапустите сервис sshd

Теперь попробуйте подключиться через SSH ... Я был успешным

2

У меня была эта проблема, и я решил ее.

Сначала я последовал ответу Константина Брызгалова и смог войти с паролем, но не смог заставить работать аутентификацию с открытым ключом. (Я создал учетную запись локального администратора cyg_server вручную.)

При дальнейшем расследовании я читал эту страницу, и там говорилось, что нужно избегать как домена, так и локальной учетной записи. Я проверил, и у меня были оба; очевидно, кто-то еще в моей организации работает на сервере cygwin и уже создал cyg_server в домене, который путали с моей локальной учетной записью.

Я удалил свою локальную учетную запись cyg_server, удалил службу sshd и переустановил, как описано на этой странице, и все отлично работало из коробки. Хитрость заключалась в том, чтобы сказать "нет" существующей учетной записи cyg_server и сказать ssh-host-config создать учетную запись "cyg_server1". Он создал локальную учетную запись и настроил все правильно. В частности:

  1. cygrunsrv --stop sshd
  2. cygrunsrv --remove SSHD
  3. Панель Ctrl> Учетные записи пользователей> Менеджер учетных записей пользователей> (удалить локальную учетную запись cyg_server)
  4. mkpasswd -l -d>/etc/passwd
  5. mkgroup -l -d>/etc/group
  6. SSH-хост-конфигурации
    • перезаписать = да
    • строгий = да
    • CYGWIN = нтсек
    • пользователь для запуска = cyg_server1
    • пароль = {...}

Проверяя учетные записи пользователей, вы увидите, что cyg_server1 действительно является локальной учетной записью, но имеет дополнительные настройки.

1

Спасибо Константину Брызгалову за то, что он указал мне правильное направление, возникла точно такая же проблема.

Более подробное решение можно найти здесь: https://cygwin.com/faq.html#faq.using.sshd-in-domain На самом деле есть 3 параметра политики, для которых требуется настроить cyg_server:

  • Действовать как часть операционной системы (SeTcbPrivilege)
  • Создать объект токена (SeCreateTokenPrivilege)
  • Заменить токен уровня процесса (SeAssignPrimaryTokenPrivilege)
1

Вот более прямой способ сделать то, что говорят предыдущие посты Константина Брызгалова и Мун-ди. Запустите терминал cygwin с правами администратора, а затем:

остановите запущенный sshd:

чистый стоп сшд

дать пользователю ssh необходимые привилегии:

editrights -a SeTcbPrivilege -u cyg_server

editrights -a SeAssignPrimaryTokenPrivilege -u cyg_server

editrights -a SeCreateTokenPrivilege -u cyg_server

перезапустите sshd:

чистый старт sshd

1

Я забыл этот вопрос, но в конце концов решил свою проблему, перезапустив ssh-host-config в моей установке на сервере Cygwin (к счастью, у меня также был RDP-доступ).

Это было все, что было нужно, но я понятия не имею, почему это сработало.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .