Как я могу использовать SSH в «Bash on Ubuntu для Windows 10»?

99

У меня установлена ​​и работает Windows 10 Anniversary Edition с «Bash on Ubuntu on Windows». Я хотел бы иметь возможность SSH к этому экземпляру Ubuntu, но хотя у меня установлен и настроен openssh-сервер (и прослушивается порт 2200), когда я пытаюсь подключиться по ssh к «localhost: 2200», он сообщает мне «Сервер неожиданно закрытое сетевое соединение ".

Кто-нибудь смог успешно это сделать?

введите описание изображения здесь

Мик
источник
Используя Process Hacker и просматривая вкладку «Сеть», он показывает, что sshd (работает в Ubuntu в Windows 10) прослушивает локальный порт 2200.
Мик
а если попытаться подключиться к ip адресу системы? Ubuntu часто отображает петлевые адреса не так, как Windows, и использует дополнительные значения в 127.0.0.0/8 (часто 127.0.1.1)
Фрэнк Томас,
@Ramhound: не правда. Localhost - это localhost, и все поделено. Вы можете прекрасно это сделать links http://localhost/из подсистемы Linux и увидеть веб-страницу, предоставленную IIS на стороне Windows. Там нет разделения.
Сами Кухмонен

Ответы:

120

Я получил это на работу; вот как.

Деинсталлировал ssh-сервер, переустановил его и убедился, что он запущен с

sudo service ssh --full-restart

Убедитесь, что вы отключили root-доступ и добавили другого пользователя в файл конфигурации.

Мне удалось подключиться к подсистеме 127.0.0.1:22, как и ожидалось. Я надеюсь, что это поможет вам.

Вот скриншот.

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config и запретить вход в систему root, установив PermitRootLogin no
  4. Затем добавьте строку под ним, которая говорит:

    AllowUsers yourusername

    и убедитесь, что PasswordAuthenticationустановлено, yesесли вы хотите войти, используя пароль.

  5. Отключите разделение привилегий, добавив / изменив: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. Подключитесь к вашей подсистеме Linux из Windows, используя ssh-клиент, такой как PuTTY.

Мастер Азазель
источник
2
мне не нужно было этого делать - странно ... но помните, что это все еще в стадии бета-тестирования, поэтому результаты могут отличаться
Мастер Азазель
7
Кроме того, мне пришлось: Остановить / отключить Windows 10 SSH Server Broker Services из панели управления службами и установить: PubkeyAuthentication no в sshdconfig
math0ne
6
Мне также нужно было добавить правило брандмауэра. Существовало существующее правило, но это было только для Windows SSH Server Proxy, и когда я остановил эту службу, брандмауэр заблокировал трафик на порту 22.
Pierre-Luc Paour
2
Мне также пришлось поменять порты ( Port 2222в /etc/ssh/sshd_configфайле), если бы не ssh-сервер windows подхватил соединение через порт 22.
возник
2
@ArtemRussakovskii они останавливают всю подсистему Linux всякий раз, когда вы закрываете окно bash ...
Сахер
27

Поскольку реализация Windows не предоставляет chroot, вам нужно изменить / etc / ssh / sshd_config

UsePrivilegeSeparation no

Также вам нужно будет создать пользователя с помощью команды useradd или около того.

d1val
источник
4
Этот шаг был необходим, чтобы заставить его работать.
Мик
1
Мне было любопытно, поэтому я нашел это по адресу freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
krs013
Указывает, разделяет ли sshd (8) привилегии, создавая непривилегированный дочерний процесс для обработки входящего сетевого трафика. После успешной аутентификации будет создан другой процесс, имеющий привилегию аутентифицированного пользователя. Цель разделения привилегий состоит в том, чтобы предотвратить повышение привилегий, сдерживая любые искажения в непривилегированных процессах. Аргумент должен быть «да», «нет» или «песочница». Если для UsePrivilegeSeparation установлено значение «песочница», то непривилегированный процесс предварительной аутентификации подвергается дополнительным ограничениям. По умолчанию это «песочница».
krs013
7
WSL внедрил chroot в сентябре 2016 года (после этого ответа).
GreenReaper
24

Ответы вышеупомянутых комитетов были великолепны. Спасибо вам за них. И хотя они подошли очень близко, у меня все еще было закрытое соединение из-за проблем 127.0.0.1 .

Я нашел и добавил дополнительные шаги из этого поста, которые заставили меня преодолеть горб. В частности, начав сначала и добавив это в качестве начального / первого шага (обратите внимание на спецификатор --purge ), наконец, решил мою вариацию этой проблемы:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

Еще раз спасибо, я надеюсь, что это дополнение поможет другим. знак равно

NYCeyes
источник
2
Почему отрицательный голос? Эти инструкции сами по себе не сработали, как уже упоминалось, и дополнительный шаг, описанный выше, сработал. Я не понимаю
NYCeyes
1
У меня была совсем другая ошибка «Нет поддерживаемых методов аутентификации (сервер отправлен: publickey)», и эти шаги исправили ее.
Майк
2
По какой-то причине Windows просто не оценила то, что я работал на порте 2222. Он никогда не показывал никаких других процессов, использующих его, и не было никаких признаков конфликта портов, но как только я сменил порты, он начал работай.
Форрестхопкинса
Порт 2222 у меня тоже не работает, никакой другой сервис не работает, но работает 22, что является проблемой, так как я хочу иметь несколько SSH-соединений.
mFeinstein
4

Я сделал все, как предложил Мастер Азазель, и у меня возникла проблема. Когда я подключился к порту, 22меня попросили ввести пароль, но пароль, который я установил в подсистеме Linux, не работал.

Решение № 1:
измените порт SSH /etc/ssh/sshd_configи перезапустите сервер SSH в подсистеме

Решение № 2:
отключите / остановите «SSH Server Broker Services» в панели управления службами Windows и перезапустите SSH-сервер в подсистеме.

scotty86
источник
1
Это применимо только в том случае, если у вас есть что-то, работающее в Windows на порту 22.
Мастер Азазель
3
Ofcz, как вы видите на моей установке по умолчанию win10, был сервис, работающий на 22 ...
scotty86
2

Причина, по которой вы не можете использовать ssh, показана в журнале с сервера:

chroot ("/ var / run / sshd"): функция не реализована [preauth]

Похоже, что в подсистеме Linux не реализована chroot, а ssh-серверу это необходимо, поэтому соединение не разрешено.

Сами Кухмонен
источник
3
Это правильно ... но другие ответы объясняют, как обойти требование chroot.
Махмуд Аль-Кудси