Предыстория

У меня появилось желание изучить go и написать на нем какой-нибудь open-source проект, изначально идей и проблем которые я мог решить в голове не было

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

Данная ситуация очень сильно меня напрягала, что приходилось тратить большое кол-во времени на то, чтобы найти правильные доступы, где-то было подключение по паролю, где-то по ключу и из-за этого данный процесс мог занимать еще больше времени

Использовать десктопные ssh клиенты я не хотел в силу привычки работать по ssh через терминал

И в конечном итоге я понял, что хочу создать свой консольный ssh клиент, недолгий поиск привел меня к тому, что консольные ssh клиенты не так популярны и не очень красивые - поэтому я приступил к созданию Михаила

Описание Михаила

Миша - консольный SSH клиент, который в будущем перерастет в полноценную утилиту для удобного взаимодействия с удаленным компьютером по SSH

Установка:

# macOS or Linux
brew install misha-ssh/tap/misha

Что умеет Миша:

  1. Умеет крудашлепить подключения

Создавать подключения - ссылка на видео

Обновлять подключения - ссылка на видео

Удалять подключения - ссылка на видео

  1. Умеет подключаться к созданному подключению

Процесс подключения - ссылка на видео

Будущие фичи:

SCP операции

Из данной утилиты хочу сделать некий tool kit под ssh, поэтому хочу будущую фичу добавить на удобное взаимодействие по SCP - так как часто приходится что-то тащить с сервера или на сервер и постоянно гуглить какие принимает аргументы SCP тоже занимает время.

Конфигурация проекта

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

Итог

В данной статье я поделился с вами своим проектом - который по моему мнению может кому-то понравится и решит такую же проблему как и у меня.

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

Так же буду рад увидеть пожелания к будущим фичам или баг-репортам в issue.

GitHub - буду рад вашей подписки на меня.

Благодарю вас за то, что прочитали данную статью.

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


  1. Alex5Anc
    06.09.2025 11:41

    Это вы сейчас "vim ssh_config" навелосипедили?


    1. deniskorbakov9 Автор
      06.09.2025 11:41

      Да


  1. Alex5Anc
    06.09.2025 11:41

    Но зачем?


    1. deniskorbakov9 Автор
      06.09.2025 11:41

      просто захотелось


      1. Alex5Anc
        06.09.2025 11:41

        Но зачем тогда каждым личным поделием хвастаться? Поймите правильно, это не наезд, а не понимание с моей стороны. Был я молодым, тоже всяких поделий клепал до чертиков, но я их как-то даже друзьям не пытался втюхать.


        1. Nefrace
          06.09.2025 11:41

          А почему бы и не делиться, особенно если это довольно полезное поделие? Это же не какой-то HelloWorld или очереднй ToDo-app. Да, аналоги наверное есть, но и свой юзер на такое найдётся. Я до сегодняшнего дня не видел TUI'шных SSH-клиентов подобного рода, а это было бы лично мне очень удобно, т.к. я, как и автор, часто обитаю в терминале и подключаюсь к разным хостам. Я думал сделать что-то подобное, тоже на Go, но как-то и не ушло дело дальше дум. Теперь наверное буду пользоваться этим.

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


          1. deniskorbakov9 Автор
            06.09.2025 11:41

            Благодарю


        1. deniskorbakov9 Автор
          06.09.2025 11:41

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


          1. DoctorCat92
            06.09.2025 11:41

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


            1. deniskorbakov9 Автор
              06.09.2025 11:41

              Благодарю


    1. DoctorCat92
      06.09.2025 11:41

      Положительной практикой для разработчика является писать код без всякой на то причины))


  1. 13werwolf13
    06.09.2025 11:41

    Могу предложить своё решение, проще и ширина сферы применения побольше:


    1. AlexDeng
      06.09.2025 11:41

      Конечно выкладывай


      1. 13werwolf13
        06.09.2025 11:41

        я даже не заметил что хабр съел кодблок..

        универсальный для bash и zsh
        sshv() {
            HOSTS=$(awk '/^Host / {for(i=2;i<=NF;i++) print $i}' ~/.ssh/config ~/.ssh/config.d/*.conf 2>/dev/null | grep -v '\*')
        
            SSH_HOST=$(echo "$HOSTS" | fzf --preview "$(cat <<'EOF'
        host={}
        CONFIG=""
        [ -f ~/.ssh/config ] && CONFIG="$CONFIG
        $(cat ~/.ssh/config)"
        [ -d ~/.ssh/config.d ] && CONFIG="$CONFIG
        $(cat ~/.ssh/config.d/*.conf 2>/dev/null)"
        [ -f /etc/ssh/ssh_config ] && CONFIG="$CONFIG
        $(cat /etc/ssh/ssh_config)"
        [ -d /etc/ssh/ssh_config.d ] && CONFIG="$CONFIG
        $(cat /etc/ssh/ssh_config.d/*.conf 2>/dev/null)"
        
        echo "$CONFIG" | awk -v host="$host" '
            BEGIN{show=0}
            /^Host / {
                show=0
                for(i=2;i<=NF;i++) if($i==host) show=1
            }
            show==1 {
                print
                next_line=$0
            }
            /^$/ && show==1 {show=0}
        ' | bat -l ssh_config --style=plain --color=always
        EOF
        )" \
            --height=50% \
            --margin="2%,15%,2%,2%" \
            --layout=reverse-list \
            --border="rounded" \
            --color=dark,fg:magenta)
        
            if [ -n "$SSH_HOST" ]; then
                if [ "$1" = "-e" ]; then
                    FILE_LINE=$(grep -n "^Host .*\\b$SSH_HOST\\b" ~/.ssh/config ~/.ssh/config.d/*.conf 2>/dev/null | head -n1)
                    FILE=$(echo "$FILE_LINE" | cut -d: -f1)
                    LINE=$(echo "$FILE_LINE" | cut -d: -f2)
                    nano +${LINE},1 "$FILE"
                else
                    echo "Connecting to $SSH_HOST"
                    ssh "$SSH_HOST"
                fi
            fi
        }
        


  1. sergeym69
    06.09.2025 11:41

    SCP поддерживается в MC и Far2l - оба есть для macos и гораздо удобнее лазания в консоли. MC вообще в консоли работает, в Far2l есть опция для работы в консоле


  1. pvzh
    06.09.2025 11:41

    изначально идей и проблем которые я мог решить в голове не было

    Как же, сейчас витает в воздухе идея, тут по этой теме много обсуждений, если реализуете, то почёт и уважуха будут МАКСимальные ;)


    1. deniskorbakov9 Автор
      06.09.2025 11:41

      какая идея ?


      1. pvzh
        06.09.2025 11:41

        Open-source клиент мессенджера Макс


  1. qwertykma
    06.09.2025 11:41

    Smartssh


  1. pavelmvl
    06.09.2025 11:41

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

    Спасибо за честность!


    1. deniskorbakov9 Автор
      06.09.2025 11:41

      благодарю


  1. server41k
    06.09.2025 11:41

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


    1. firehacker
      06.09.2025 11:41

      Это на каком языке написано?


  1. Ubuntos
    06.09.2025 11:41

    По моему скромному мнению, весьма полезная публикация. Автору - успехов!


    1. deniskorbakov9 Автор
      06.09.2025 11:41

      благодарю


  1. gluck59
    06.09.2025 11:41

    brew install --cask misha

    Warning: Cask 'misha' is unavailable: No Cask with this name exists.


  1. Newbird57
    06.09.2025 11:41

    Go ssh-a , gossha )))