Предыстория
У меня появилось желание изучить go и написать на нем какой-нибудь open-source проект, изначально идей и проблем которые я мог решить в голове не было
На работе часто приходилось подключаться на несколько разных машин за рабочий день - доступы к ним лежали в разных чатах, файлах и тд
Данная ситуация очень сильно меня напрягала, что приходилось тратить большое кол-во времени на то, чтобы найти правильные доступы, где-то было подключение по паролю, где-то по ключу и из-за этого данный процесс мог занимать еще больше времени
Использовать десктопные ssh клиенты я не хотел в силу привычки работать по ssh через терминал
И в конечном итоге я понял, что хочу создать свой консольный ssh клиент, недолгий поиск привел меня к тому, что консольные ssh клиенты не так популярны и не очень красивые - поэтому я приступил к созданию Михаила
Описание Михаила
Миша - консольный SSH клиент, который в будущем перерастет в полноценную утилиту для удобного взаимодействия с удаленным компьютером по SSH
Установка:
# macOS or Linux
brew install misha-ssh/tap/misha
Что умеет Миша:
Умеет крудашлепить подключения
Создавать подключения - ссылка на видео

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

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

Умеет подключаться к созданному подключению
Процесс подключения - ссылка на видео

Будущие фичи:
SCP операции
Из данной утилиты хочу сделать некий tool kit под ssh, поэтому хочу будущую фичу добавить на удобное взаимодействие по SCP - так как часто приходится что-то тащить с сервера или на сервер и постоянно гуглить какие принимает аргументы SCP тоже занимает время.
Конфигурация проекта
Хочу так же реализовать конфигурирования утилиту - где бы мы могли задавать тему оболочки подключения, визуальную тему приложения, расположение различных файлов и т. д.
Итог
В данной статье я поделился с вами своим проектом - который по моему мнению может кому-то понравится и решит такую же проблему как и у меня.
Буду очень признателен если вы поставите на репозиторий звезду и так же попробуете данную утилиту в деле, потому что хочу узнать мнение людей.
Так же буду рад увидеть пожелания к будущим фичам или баг-репортам в issue.
GitHub - буду рад вашей подписки на меня.
Благодарю вас за то, что прочитали данную статью.
Комментарии (27)

Alex5Anc
06.09.2025 11:41Но зачем?

deniskorbakov9 Автор
06.09.2025 11:41просто захотелось

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

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

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

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

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

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

AlexDeng
06.09.2025 11:41Конечно выкладывай

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 }

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

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

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

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

gluck59
06.09.2025 11:41brew install --cask misha
Warning: Cask 'misha' is unavailable: No Cask with this name exists.
Alex5Anc
Это вы сейчас "vim ssh_config" навелосипедили?
deniskorbakov9 Автор
Да