LINUX.ORG.RU

GoTo — простой менеджер ssh-подключений

 , , , ,


2

4

GoTo – консольный менеджер ssh-подключений. Программа написана на языке Go и распространяется по лицензии MIT.

Утилита помогает быстро манипулировать списком серверов, а также предоставляет интерфейс к файлу .ssh/config. Программа поддерживает поиск и группировку. На гитхабе есть короткие демки и F.A.Q., где можно посмотреть некоторые детали.

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

>>> github.com/grafviktor/goto



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от grafviktor

Я не говорил какой выбрал бы я :)
Мне интересно твоё мнение как разработчика. Ход мыслей к принятию решения сделать конфигурацию на ямл.

Это может быть банальным «мне нравится, прикольно и либу удобную нашёл», а может быть что-то более глубокое, не знаю, понятия не имею, догадки не строю, вот и захотелось узнать, интересно.

Я хоть и отписал в негативной манере, но на это внимания не обращай, это превентивный ответ на вопрос «а что не так?». А так порой про то к чему у меня претензии порой слышу слова над которыми можно и подумать и пошатать свою точку зрения, а порой не слышу. Я же не ругаю проект, мне просто интересно техническое решение в рамках задачи конфигурирования, тема эта большая и интересная, многогранная. Иногда решение «прост вот так», а иногда целые продумывания на 100 лет вперёд =)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от grafviktor

argumentum ad hominem с первого же предложения? Браво.

Что человек без кислорода сдохнет - тоже «категоричное суждение»?

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

Задавайте произвольную конфигурацию в ssh_config, подключайтесь к ним через меню утилиты.

Так оно ещё и неполноценно реализовывает параметры клиента ssh? Тогда зачем оно вообще нужно в виде отдельного бинарника, если заменяется макросом для vim или однострочником на баше?

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

Так фишка в том, что эта программа не редактирует ~/.ssh/config. Она его только читать умеет. Т.е. с её помощью нельзя для себя и других первый раз заполнить конфиг, чтобы потом пользоваться по-человечески.

shell-script ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

не говорил какой выбрал бы я :) Мне интересно твоё мнение

Ах, я не понял, простите. Выбор в пользу yaml’а был сделан только потому, что этот формат конфигурации часто используется в Go проектах. Больше тут нечего добавить.

Я лично предпочитаю json, по моему мнению он более выразителен, да еще бонусом имеет родную поддержку в JS. Но опять же - писать парсер к json’у так себе удовольствие. Мне приходилось.

grafviktor
() автор топика
Ответ на: комментарий от mx__

Судя по исходникам, она умеет читать ~/.ssh/config, если ей его подкинуть. Но всё, что ты настроил, она хранит в собственном ямле. Т.е. твои изменения не попадут в итоговый ~/.ssh/config.

shell-script ★★★★★
()
Ответ на: комментарий от grafviktor

Резюмируем:

  1. Приложение срёт логами в каталог не предназначенный для этого
  2. Дублирует информацию из ~/.ssh/config себе,
  3. Имеет бессмысленное имя
  4. Не приносит никакой новой функциональности
  5. На любой нестандартный чих требует всё-равно открывать ~/.ssh/config редактором и править его минуя программу.
  6. upd формат для параметров программы обусловлен не разумностью выбора, а «потому что все с крыши прыгали»
  7. «Настроенные подключения в программе» за её пределами не существуют.

Крайне полезная программа, да.

mogwai ★★★★★
()
Последнее исправление: mogwai (всего исправлений: 2)
Ответ на: комментарий от shell-script

Ну тогда оно не нужно получается :(

X512 ★★★★★
()
Ответ на: комментарий от mogwai
  1. Приложение срёт логами в каталог не предназначенный для этого
  2. ..

Вам бы афиши оформлять или рекламные ролики делать. Я Вам доступ к проекту дам. Чтобы Вы мне readme «улучшили» :)

grafviktor
() автор топика
Ответ на: комментарий от Ja-Ja-Hey-Ho

Программа пропускает записи в которых не определено значение для ключа «Hostname».

Большое спасибо! Возможно баг в парсере.

@mogwai, восьмой пункт к вашему списку.

grafviktor
() автор топика
Ответ на: комментарий от shell-script

Но всё, что ты настроил, она хранит в собственном ямле.

Это еще зачем? Странно, мне показалось что логичнее и проще это сделать редактор для ~/.ssh/config с возможностью сворачивания по host и все.

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

Ты просил конструктивную критику. Вот тебе нумерованный список того, что стоит поправить. И я вижу тут в треде как минимум двух человек, которые могут найти применение твоему софту после этих исправлений.

shell-script ★★★★★
()
Ответ на: комментарий от mx__

Странно, мне показалось что логичнее и проще это сделать редактор для ~/.ssh/config

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

Более того, в следующей минорной версии будет поддерживаться сетевой путь к ssh_config. Это нужно для того чтобы все члены команды разработчиков / devops’ов имели одинаковую конфигурацию в любой момент времени.

grafviktor
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Да я так, мимокрокодил) Просто увидел реакцию автора «и так сойдёт» в нескольких комметариях, и не смог удержаться.

mogwai ★★★★★
()
Ответ на: комментарий от shell-script

Ты просил конструктивную критику. Вот тебе нумерованный список

Парни, я за это благодарен! Без шуточек :)

grafviktor
() автор топика
Ответ на: комментарий от beastie

Эм, encoding/json, не?

Да нет, это было лет 15 назад. Сейчас, конечно писать парсер для JSON разве что только в академических целях.

Это был мой аргумент для @LINUX-ORG-RU , что писать парсеры для других конфигов не сильно проще.

grafviktor
() автор топика
Ответ на: комментарий от panter_dsd

goreleaser это не про опакечивать (для этого у его разрабов есть отдельная тулза, nfpm), а для того чтобы автоматически выкладывать релизы в Homebrew, AUR, релизы github/gitlab и т.п. С подписями, ченджлогами и полным фаршем.

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

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

А есть аргументы этого? Интересно просто.
(интересно почему вы ~/.ssh/config все время обзываете как ssh_config, если что то ssh_config это глобальная штука и туда да лучше не писать)

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

А есть аргументы этого? Интересно просто.

Аргументы очень прагматичные на самом деле:

  • В ssh_config более 100 опций. Трудоемко реализовать интерфейс.
  • Валидаторы ввода и поддержка изменений в ssh требуют дополнительных усилий.

Реализовывать куцую поддержку не хотелось, к тому же мы храним конфиги в системе контроля версий, поэтому для нас главный приоритет это иметь единую конфигурацию, а не писать в ssh_config напрямую.

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

почему вы ~/.ssh/config все время обзываете как ssh_config, если что то ssh_config это глобальная штука

Хм, я думал, это вообще любой конфиг, хоть пользовательский, хоть системный. Посмотрю.

grafviktor
() автор топика
Ответ на: комментарий от mogwai

Проявлю разборчивость и буду переносить такие темы в форум (Desktop либо Admin) при наличии выбора из 4 хороших новостей о ненаколеночных и 4 наколеночных, вот.

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

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

Хм, я думал, это вообще любой конфиг, хоть пользовательский, хоть системный.

К слову, конфиги ssh можно побить на части и инклудить. Собственно, я так и делаю. У меня группы хостов логически отделены в отдельные файлы. Поэтому нет необходимости читать/править одну огромную портянку.

shell-script ★★★★★
()
Ответ на: комментарий от grafviktor

Хм, я думал, это вообще любой конфиг, хоть пользовательский, хоть системный. Посмотрю.

man ssh_config

Вы меня извините но только виндузятники могут это путать …

mx__ ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

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

Какие-нибудь XML или JSON враждебны к людям, в TOML вложенные структуры выглядят очень ущербно. На любом популярном языке парсер YAML уже реализован, поэтому читать его спеку не надо, а сам формат интуитивно понятен и поддерживается текстовыми редакторами из коробки.

Единственная реальная проблема ямла кмк это хитрый вывод типов в случае когда имели в виду строку но забыли кавычки.

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

Вы меня извините но только виндузятники могут это путать …

Так что не так-то?

SSH_CONFIG(5)                                                                                                                BSD File Formats Manual                                                                                                                SSH_CONFIG(5)

NAME
     ssh_config - OpenSSH client configuration file

DESCRIPTION
     ssh(1) obtains configuration data from the following sources in the following order:

           1.   command-line options
           2.   user's configuration file (~/.ssh/config)
           3.   system-wide configuration file (/etc/ssh/ssh_config)

grafviktor
() автор топика
Последнее исправление: grafviktor (всего исправлений: 2)

Интересная тулза, надо пощупать

enep ★★★★★
()

консольный менеджер ssh-подключений

Я решал подобную задачу вот так (можно промотать на 57 секунду, но лучше посмотреть сначала)

https://youtu.be/yBu0M8iCtVw

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

Следующим шагом для экономии времени, рекомендую менеджить не ssh подключений, а рабочие «сессий» и «шарить» их (делать общими) между коллегами

В рамках proof of concept я подошел к этой задаче следующим образом:

https://www.youtube.com/watch?v=ainUEAYCHIk

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 2)
Ответ на: комментарий от gagarin0

Это очень интересно, то что Вы предлагаете. К сожалению, я только в общих чертах смог понять детали взаимодействия с хостами. А вот как это реализовать не очень представляю. С mindmap незнаком.

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

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

К сожалению, я только в общих чертах смог понять детали взаимодействия с хостами

Представьте, когда пользователь вводит в терминал команду (stdin) и получает результат (stdout + stderr), в «шину» обработки событий генерируется такое сообщение

source: <user>.<host>.<session name>
data:
  ps1: "<user>@<host> <dir>$"
  input: uptime
  output: "19:11:41 up  5:21,  1 user,  load average: 0.77, 0.88, 1.00"

А дальше наша задача строить «дерево знаний» (knowledge graph) на основе таких событий из консоли

Результат можно наблюдать в этом видео:

https://youtube.com/watch?t=29&v=znMYZOGQ3S0 (с 29 секунды)

Сам граф (neo4j) можно наблюдать в конце видео с 2м 29с

https://www.youtube.com/watch?t=2m29s&v=znMYZOGQ3S0

С mindmap незнаком.

С mindmap знакомым быть не надо, я их использую только для визуализации графа и еще пары плюшек

Я думаю, если бы была инструкция по настройке

На текущий момент проект в активной стадии «девелопмента», короткой инструкции нет

многие бы взяли ее на вооружение.

Вся разработка ведется на гитхабе, и если есть желание и время - можно к ней присоединиться

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

А что по вашему 2 (~/.ssh/config) == 3 (/etc/ssh/ssh_config)?

Я думаю, что разница лишь в приоритете.

grafviktor
() автор топика
Ответ на: комментарий от usermod

remmina?

Глючная. И целый вагон зависимостей тащит с собой, включая avahi и vte3:

avahi
bash
cairo
curl
gcc-libs
glib2
glibc
gtk3
hicolor-icon-theme
json-glib
libayatana-appindicator
libgcrypt
libsodium
libssh
libx11
openssl
pango
python
vte3

putty для вендузятников

А вот и нет.

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

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

В консоли и на серверах в целом, понятно, не вариант, но на десктопе самое то.

Путти для линукса собраи давно, но это просто каноничное ненужно, фантомные судороги вендузятникоф.

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

она графическая и зонтиком накрывает кучу протоколов

Для полноценной удалённой универсальной работы (как графической, так и консольной) с множеством разных протоколов есть Asbru-CM. А если нужен простейший менеджер SSH-сессий, а не такой комбайн, то PuTTY. Зачем нужна глючная Remmina, которая не подпадает ни под одну из этих двух категорий (по функциональности слабая по сравнению с Absru-CM, но и при этом не лёгкая, в отличие от PuTTY) — совсем не понятно.

posixbit ★★★
()
Последнее исправление: posixbit (всего исправлений: 3)
Ответ на: комментарий от rtxtxtrx

fzf по ctrl+R ищет в history, что заметно не то что надо. зато fzf умеет по ssh ** делать аналогично, но по ~/.ssh/config - и вот это уже то что надо.

fraks_nsk
()
Ответ на: комментарий от posixbit

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

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

Asbru-CM — не «усечённый аналог Remmina», а мощный корпоративный менеджер сессий, рассчитанный на управление сотнями и тысячами соединений с продвинутой организацией, тэгированием, скриптованием, интеграцией с LDAP/PAM и централизованной безопасностью.

А Remmina — базовый клиент для индивидуальных пользователей с более простым UI и дружелюбным к новичкам/обывателям интерфейсом, а также ограниченной масштабируемостью.

То, что Remmina предустановлена в популярных дистрибутивах — логично, потому что она охватывает базовые нужды пользователя. Asbru-CM — нишевый функциональный инструмент для профи и крупных инфраструктур, и её распространённость не должна измеряться по наличию в «из коробки» пакетах.

Установка Asbru-CM не «как говно», а вполне стандартная для нишевого профессионального инструмента — AppImage с гитхаба, запускающийся по клику, либо git clone && makepkg -si.

Функционально Asbru-CM намного мощнее и гибче Remmina:

1. Asbru-CM позволяет организовать серверы по регионам, функциям, статусу с помощью тэгов и групп. Возможность автоматического обновления состояния сессий и мониторинга подключений с предупреждениями.

2. Автоматически запускать скрипты для проверки доступности перед соединением. Более того, полная поддержка автоматизации с хук-сценариями (bash/sh), чего у Remmina нет.

3. Интеграция с системными агентами аутентификации (KeepassXC, GNOME Keyring, macOS Keychain) и 2FA.

4. Поддержка широкого спектра протоколов, включая Raw TCP и сложные SSH-туннели, интеграция с системой (PAM, LDAP) для аутентификации.

5. Встроенное централизованное логирование и аудит — ключевые для крупных корпоративных сред возможности.

posixbit ★★★
()
Последнее исправление: posixbit (всего исправлений: 3)
Ответ на: комментарий от Psilocybe

А что в Го нет аналога JSON.parse()?

Есть конечно. Это было абстрактное обсуждение насколько «элегантно» выглядит гипотетический парсер для того или иного формата конфигурационных файлов (yam, json, xml, …)

grafviktor
() автор топика
Ответ на: комментарий от grafviktor

Но опять же - писать парсер к json’у так себе удовольствие. Мне приходилось.

Извини что вклиниваюсь, но на golang парсить json очень просто и удобно. Другое дело, что конфиги в json так себе идея (хотя бы из-за отсутствия комментариев)

Кроме yaml, как уже выше правильно написали, есть toml - практически традиционный человекочитаемый конфиг с функциональностью yaml и он тоже используется огромным количеством софта, написанном на go

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

А что в Го нет аналога JSON.parse()?

Там еще удобнее. Описываешь структуру. Создаешь переменную (или массив) с этим типом. И делаешь unmarshal.

adn ★★★★
()
Ответ на: комментарий от grafviktor
  • Я хочу парсер JSON на Python голая имплементация с recursive descent
  • А теперь добавь в него поддержку комментариев //

И дипсик выдал рабочий код

rtxtxtrx ★★★
()
Ответ на: комментарий от posixbit
  1. группы и теги тоже есть

  2. тоже есть

  3. использует гном-ринг м кде. про остальные не знаю.

  4. судя по документации там только ssh, rdp и на скриншотах vnc. Это меньше, чем в ремина. Там хоть x2go есть?

  1. Встроенное централизованное логирование и аудит — ключевые для крупных корпоративных сред возможности.

Офигеть как надо пользователю. Аж реммину со всеми плюшками отменили…

usermod
()
Ответ на: комментарий от adn

есть toml - практически традиционный человекочитаемый конфиг с функциональностью yaml

У toml нет raw блоков и нет ссылок, попробуй в toml записать SQL запрос select 'last single quote''' без экранирования. В yaml это делается элементарно:

str: |-
  select 'last single quote'''
Eshkin_kot ★★
()
Ответ на: комментарий от adn

Другое дело, что конфиги в json так себе идея (хотя бы из-за отсутствия комментариев)

на мой взгляд тоже yaml и toml удобней.

Видел лайвхак в одной системе с конфигом на json. Там к именам ключей приделали подчеркивание и они как комментарии стали. Хочешь разкоментарить, убрал подчеркивание.

{
_speed:10,
__speed:"скорость лодки",
_height: 5,
__height: "высота рубки",
width:3
__width: "ширина и все такое"
}
usermod
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.