LINUX.ORG.RU

кроссплатформенное клиент-серверное приложение поверх ssh?

 , , ,


0

3

Необходимо малой кровью сделать клиент-серверное приложение, немного нестандартной (наверное) архитектуры:

  1. клиент заходит на удаленный хост и запускает там сервер, каждый раз с нуля, кидает серверу какие то команды а-ля RPC, сервер реагирует, в итоге клиент закрывает сессию, сервер выключается. То есть это наверное скорее мастер-слэйв комбинация, я не знаю точно как ее правильно назвать.

  2. Вход должен осуществляться по ssh с настроенным открытым ключем, что бы не возиться с вопросами безопасности. До сих пор у меня клиент с сервером тупо общались через stdin/out, это было не очень удобно отлаживать но зато очень просто делать, но тут возникло новое требование:

  3. Клиент должен быть кроссплатформенным и работать в т.ч. под виндой. Поскольку клиент на питоне с кроссплатформенностью проблем нет, но под виндой есть проблемы с ssh - оно там через PuTTY и вообще кривое какое то.

Как это можно сделать Ъ? Чего я точно НЕ хочу делать так это поднимать на удаленном хосте свой полноценный сервер который будет слушать порт и тд - в первую очередь из за проблем с безопасностью, кроме того на удаленном хосте у меня банально может не быть рутовых прав.

Пока что единственная мысля - сделать все том же духе, но как то разобраться с PuTTY что бы и на винде поднимать коннект через popen(…)

★★

Сервер просто ставишь пользователю в качестве shell, а клиент на libssh, для питона наверняка есть готовые биндинги

sparks ★★ ()
Ответ на: комментарий от sparks

О, это мысль, спасибо. Выглядит более прямо чем из консоли процесс запускать;-)

AntonI ★★ ()
Ответ на: комментарий от slovazap

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

AntonI ★★ ()

В современной винде есть обычный ssh из коробки.

Если нужно поддерживать древние версии, посмотри на plink.exe в каталоге путти. Это то, что тебе нужно.

Реализовывать ssh в своём приложении глупо и ненужно.

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от AntonI

Ну я пока гуглил парамико который забыл как называется, нашёл упоминания кучи модулей. Да и для парамико на pypi есть как минимум два форка. Так что вариантов куча. Должны быть pure-python реализации у которых точно нет проблем с переносимостью и сборкой.

slovazap ★★★★★ ()

https://github.com/mgwilliams/python-libssh

Прошу обратить внимание только что там речь про реализацию протокола ssh, про pty и т.п. там ессно ничего нет. А вот аутентификация и шифрование - есть.

Альтернативой ssh тут вполне может выступать протокол TLS решает те-же задачи по-сути имеет +/- те же возможности по аутентификации и шифрованию. Более распостранён, но никак не специфицирует какие-то нюансы связанные именно с шелл доступом.

Помимо putty под винду 100500 портов openssh, в десяточке insider preview даже из коробки вроде оно имеется, да - сервер тоже, т.е. рано или поздно попадёт и в стабильные выпуски.

Конкретно для твоей задачи и правда openssh выглядит хорошим вариантом, хотя скорее всего так будет только на уровне прототипа, что не мешает использовать протокол ssh для совместимости например.

pon4ik ★★★★★ ()

имхо путти в стандартный вывод вообще не пишет, так что с попеном облом, есть плинк который делает почти тоже самое.

ilovewindows ★★★★★ ()

Типа как rsync что ли? Ну и срисуй у них.

t184256 ★★★★★ ()

Т.е. де факто давать клиенту шелл на сервере безопасно, а слушать сокет не безопасно? Ооокей. Для открытия сокета на порте с номером >1024 не нужны привелегии, это можно делать и от обычного пользователя. Реализации https сервера на питоне наверняка есть в количествах. К чему этот пердолинг с ssh?

cobold ★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей