Мы уже все привыкли, что конференции проводятся виртуально. Мы все работаем через зумы, скайпы, миты и тимзы. Удобно, конечно, но у нас есть одна занудная проблема. Когда нам, программистам надо расшарить экран, мы тяжело вздыхаем и нажимаем кнопку Share Screen. Всё это не без проблем.


Как показать детям те прелести, которые происходят в консоли?

Самое неприятное — это когда возникает необходимость показать какую-то ссылку на экране. После завершения операции в консоли отобразилась ссылка, или ключ, который надо расшарить с командой. Естественно, приходится выделять, копировать и «дублировать в чатик». Особенно это неудобно, когда в чатик надо продублировать то, что выплюнула тебе какая-нибудь команда терминала. Строки, конечно же, заботливо съедут, форматирование потеряется, а цвета поблёкнут.

О безопасности замолвите слово...
Все нижеописанные инструменты шарят данные через открытые сайты и сети. Эти инструменты отлично подходят как для быстрого дебага и обучения джунов, так и для сливания приватных корпоративных ключей доступа. Поэтому проявляйте осторожность при шаринге информации.


▍ Шарим консоль — seashells.io


Решением этих проблем и занимается seashells.io

Вместо того чтобы париться с тем, чтобы правильно вывести терминал на экран как видео, вы просто можете стримить терминал прямо на сайт. Причём для этого даже не нужно устанавливать никаких клиентов. Старый добрый nc работает как нельзя лучше.

Итак, давайте попробуем:

echo "Привет, Хабр!" | nc seashells.io 1337

В ответ мы получим ссылку, пройдя по которой мы увидим следующее:



Весь терминал — в народ!

Вывод команды полностью дублируется в текстовый терминал, доступный на сайте. Этот терминал доступен всем, у кого есть ссылка.

Но, давайте поговорим о чём-то более насущном и профессиональном. Выводить строки на экран может каждый. Как насчёт чего-то более серьёзного.

Делаем

htop | nc seashells.io 1337

В итоге получаем…



Цвета, живность и тому подобные свистопляски

Прямо в браузере у всех заинтересованных. Как вы видите, кодировки, цвета и обновления поддерживаются прямо там, из коробки.

Плюс все зрители конференции смогут насладиться возможностью копировать строки прямо из браузера.

Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]

Дополнительные моменты заключаются в следующем:

Все ошибки всё так же выводятся в терминал, но не на сайт. Для обхода этого ограничения пользуемся простым трюком:

apt-get update 2>&1 | nc seashells.io 1337

Ну и, естественно, для того, чтобы вам самому был виден вывод из консоли, можно воспользоваться tee.

apt-get | tee >(nc seashells.io 1337)

А если пользователи заменят в выданной ссылке seashells.io/v/pmMS6rAC букву v на p, seashells.io/p/pmMS6rAC то они увидят просто текстовый документ, без цветов и терминалов.

Пара занудных проблем с сайтом, о которых следует знать:

  1. Работа с клавиатурой не поддерживается. Естественно, никто не ожидает, что другие пользователи смогут запустить команды на вашем сервере через веб, но они так же не смогут сделать Ctrl+C или нажать F5. Если хочется что-то скопировать — пользуйтесь мышкой.
  2. Размер экрана определяется размером консоли, которая шарит соединение. Так что, если админ запустит htop на 4K мониторе, то обладателем мелкоэкранных устройств придётся либо уменьшать размер шрифта, либо наблюдать всё ту же проблему поехавших строк.
  3. Пять одновременных сессий на IP адрес. Так что пользователям из одной сети может прийтись туго.

Проект находится в бете и тестируется. Вам не нужно никакой регистрации. Не нужны и аккаунты. Все ссылки, созданные сайтом, будут автоматически удалены через несколько часов после завершения работы.

На сайте вы можете найти официальный клиент на питоне и пару неофициальных клиентов. (Не очень понятно, зачем, ну да пусть.)

Давайте посмотрим, если мы сможем захабраэффектить этот сайт.

▍ Шарим в консоль — transfer.sh


Никогда не попадали в такую замечательную ситуацию: сервер лежит. Нужно обновить сертификаты. Или подгрузить какой-нибудь ключ. Либо, наоборот, выгрузить ключ. Ты стоишь перед стойкой с KVM воткнутым в питомца и думаешь, что с ним делать. Иногда вещи можно починить с помощью USB флешки. Иногда этого не получается сделать. Но передавать данные на сервер и выгружать из их сервера надо.

Для этого существует большое количество сервисов, можно использовать dropbox, google, onedrive, yandex.disk, mega.io и тому подобные сервисы. Но у всех вышеописанных сайтов есть проблема. Они работают только при использовании браузеров или клиентов. Просто загрузить данные не получается.

Встречайте — transfer.sh

Для того чтобы воспользоваться сервисом, вам не нужно никаких утилит или браузеров. Прямо из консоли, набираем:

curl --upload-file ./hello.txt https://transfer.sh/hello.txt

В ответ получаем ссылку: transfer.sh/cK6onw/link.txt И всё! Файл доступен для загрузки и выгрузки. Никаких регистраций или учёток.



В дополнение, и абсолютно бесплатно, мы получаем уникальный QR код! Кто бы мог подумать!
По ссылке файл можно скачать тем же curl

curl http://transfer.sh/cK6onw/link.txt > link.txt

Если очень хочется выгрузить что-то такое секретное, то можно изначально пропустить это через gpg.

cat /tmp/hello.txt|gpg -ac -o-|curl -X PUT --upload-file "-" https://transfer.sh/test.txt
curl https://transfer.sh/1lDau/test.txt|gpg -o- > /tmp/hello.txt

Кстати, сам проект находится на гитхабе github.com/dutchcoders/transfer.sh, и если вам уж очень нравится — вы можете выгрузить его в свою среду и использовать локально. Это понизит возможность случайного распространения корпоративных ключей шифрования на всю Русь.

▍ Бонусы


Никогда не забываем, что иногда задачей сисадмина является потенциальное ожидание. Мне приходилось часами сидеть перед стойкой в ожидании пересбора рейд-массива или окончания обновления кода на проде.

Чем же можно себя занять, когда перед тобой нет интерфейса? Ну, естественно, можно установить lynx и попытаться почитать хабр, но если честно, наш уютный сайт не очень хорошо себя ведёт в lynx. А зачастую и установкой lynx заниматься не всегда хочется.

Но зачем нам lynx, если в мире есть telnet?

telnet aardmud.org

Аууууууу......

И пожалуйста. Начинайте играть. Создавайте логин, пароль, выбирайте расу, класс и вперёд, исследовать мир. С ещё тремястами такими же странными людьми, как и вы, которое готовы гонять DND-like игры в консоли, в ожидании деплоя.

А если DND это не для вас — то почему бы не сыграть в шахматы?

telnet freechess.org

Ходи конём!

Ну а дальше — по тексту. Е2-Е4 и уверенный слив противника.

Регистрация на обоих сайтах не требует выдачи никаких персональных данных и сделана только с целью сохранения прогресса.

Отдыхайте сколько влезет.

▍ Выводы


Тенденции развития консольных приложений не могут не радовать. Давайте делиться полезными console-only вещами, которые могут помочь сэкономить вам время.

Ещё раз для простоты:

  1. seashells.io
  2. transfer.sh
  3. sprunge.us — аналог pastebin, спасибо tvl
  4. tmate.io — совместная работа через консоль, спасибо m1a1x1
  5. nc rya.nc 1987 — если админ вас раздражает, спасибо nervix
  6. awesome-console-services — большая коллекция, спасибо belonesox

Комментарии (27)


  1. sleirsgoevy
    27.10.2021 16:59
    +3

    Справедливости ради, Яндекс.Диск позволяет получать доступ к диску по WebDAV. Скачивать (и даже загружать через curl -T) файлы можно по ссылкам вида https://логин:пароль@webdav.yandex.ru/path/to/file.txt. Dropbox тоже позволяет создать прямую ссылку, не требующую браузера.


    1. Nurked Автор
      27.10.2021 17:05

      Тут вы, несомненно, правы. Но, каждый раз когда мне надо вводить свой пароль на неизвестном сервере, мне становится не по себе.

      Плюс, печатать это намного проще в консоли. Пароль-то у меня длинный, 20 символов, включая знак восклицания и двоеточие. А вводить эти два символа в командной строке - это сомнительное удовольствие.


    1. v-oz
      10.11.2021 11:16
      +1

      что-то у меня после включения двухфакторной ауте...ции сломался плагин для тотал командера на ведроиде. И в настройках янде делал ему пароль - не помогает.

      Или я что не так делаю или одно из двух


  1. tvl
    27.10.2021 17:17
    +3

    Есть еще http://sprunge.us/


    1. Nurked Автор
      27.10.2021 17:35
      +4

      Замечательный дизайн сайта :-) Запишем.


  1. m1a1x1
    27.10.2021 18:14
    +3

    Я часто для таких целей использую tmate: https://tmate.io/

    Очень простая в использовании утилита. Получается полноценный опыт парного программирования. Очень советую.


    1. Nurked Автор
      27.10.2021 19:33
      +1

      Прикольно. Спасибо. Добавил в список.


  1. DurRandir
    27.10.2021 22:31
    +3

    Self-hosted аналог seashells.io был бы интересен, никто не знает?


    1. Nurked Автор
      27.10.2021 22:46
      +3

      Нет, но я ему напишу, попрошу расшарить код


      1. DurRandir
        28.10.2021 15:14
        +1

        Будет здорово, спасибо.


    1. Cheater
      27.10.2021 23:28
      +1

      socat


      1. DurRandir
        28.10.2021 15:15

        А что у него «с той стороны»? Как раз аналог этого сайта и нужен. Так то можно и N подключений к одному tmux'y использовать.


    1. Oxyd
      28.10.2021 07:32

      Ну можно на основе gotty наваять.


    1. event1
      28.10.2021 17:27

      https://github.com/zolrath/wemux на основе tmux


  1. vsviridov
    27.10.2021 23:02
    +2

    Есть еще `butterfly` (https://github.com/paradoxxxzero/butterfly). он правда давно не обновлялся, но идея та-же… У него правда безопасность по клиентским SSL сертификатам, он больше не для того, что-бы расшарить консоль, а иметь к ней доступ вне SSH


  1. saboteur_kiev
    28.10.2021 01:57
    +4

    Так шарить консоль всегда можно было через screen

    По поводу консольных программ, я писал простенький аналог certificate browser под консоль: https://habr.com/ru/post/539612/

    Честно говоря, если нужно кому-то что-то интерактивно шарить, то обычно используется хотя бы голосовая связь, а практически в любом "звонке" есть и шаринг экрана. Скайп, телеграм, зум, да практически все. Плюс трансфер файлов, плюс чат прилагается.

    По поводу передачи файлов - так обычный scp/nfs/ftp/ssh - не совсем понятно зачем выкладывать нужные тебе файлы куда-то. А если у тебя уже там есть сервер, то штатные утилиты же достаточны, и httpd или nginx чуть ли не из коробки.

    telnet aardmud.org

    MUD это хорошо. Очень. Но играть в чистом телнете.. неудобно. Куда же пихать ранвалки, триггеры, или хотя бы удобные стрелочки...Плюс спутать DND и CRPG, точнее прародителя MMORPG ;)

    Статья интересная. Честно. Но уж очень велосипедные решения, особенно учитывая, что nc не везде есть из коробки, и прав может не хватать.


    1. albatross
      28.10.2021 20:06
      +3

      > Так шарить консоль всегда можно было через screen
      нынче уже tmux рулит:

      открываем сессию

      $ tmux -S /tmp/tmux_share new -s my_nickname
      $ chmod 777 /tmp/tmux_share
      


      коллеги заходят на этот же сервер по ssh и подключаются к нашей сессии:
      $ tmux -S /tmp/tmux_share att -t my_nickname -r
      
      -r - подключение в режиме read-only, если надо в парное программирование, этот параметр можно не указывать
      


  1. belonesox
    28.10.2021 02:38
    +6


    1. Oxyd
      28.10.2021 11:19
      +1

      Ох какая коллекция! Я от этого автора только про погодный сервис знал...


  1. scorpka
    28.10.2021 06:33

    Сначала не понял почему у автора проблемы какие то..

    Но зачем нам lynx, если в мире есть telnet?
    (С)

    После этой строчки понял


  1. kasigor
    28.10.2021 12:08
    -1

    Ошибку дает:

    ce@eee:/$ echo "Привет, Хабр!" | nc seashells.io 1337

    -bash: syntax error near unexpected token `seashells.io'

    Чего ему надо еще?

    p.s.: Понял почему не работало. Надо через sudo запускать было ))


  1. shyneko
    28.10.2021 14:15
    +1

    Еще можно по ssh в dcss поиграть. https://crawl.develz.org/


  1. nervix
    28.10.2021 16:24
    +4

    nc rya.nc 1987

    лучший консольный сервис


    1. Nurked Автор
      28.10.2021 17:37
      +1

      Ээээээ. Вы с ума сошли? Я только что поднял виртуальный сандбокс, только для того, чтобы увидеть это? Точно в закладки.


    1. DistortNeo
      28.10.2021 17:44

      Обнаружил, что из-под far2l это не работает (не отображаются цвета).
      Как думаете, стоит завести issue?


      1. Nurked Автор
        28.10.2021 17:53

        Нет, тут скорее всего проблема в вашем терминале.

        Хотя, я согласен, для такого полезного сервиса, можно было бы выпустить и поддержку различных терминалов, но. Всё-же, тут лучше с правильной цветовой палитрой


        1. DistortNeo
          28.10.2021 18:10
          +1

          Нет, таки в far2l, потому что в mc всё работает. Соответствующий issue уже есть:
          https://github.com/elfmz/far2l/issues/901