Знание должно быть доступно!

Путь /ОС/Linux

Подключение к SSH как в Remmina, но через консоль с автоподстановкой хостов из ~/.ssh/config.

Итог / команда:
Подключаемся к хосту через zssh <имя_хоста> с автоподстановкой из ~/.ssh/config.

Шаги:

  1. Шаг 1: Установить fzf и zsh + плагин zsh-ssh-config или сделать алиас.
  2. Шаг 2: Настроить ~/.ssh/config с хостами, алиасами, портами, пользователями.
  3. Шаг 3: В ~/.zshrc добавить функцию для интерактивного выбора хоста через fzf.
  4. Шаг 4: Перезапустить терминал или source ~/.zshrc.
  5. Шаг 5: Использовать zssh для автоподстановки и подключения.

Пример кода / команд:

# ~/.ssh/config

#Главный сервак
Host f.test.cc
  HostName 45.83.105.14
  User x
  Port 22
  ForwardX11 yes
  ForwardX11Trusted yes

#zssh-hide
#Сервак git'a, скртый для показа в zssh
Host git.test.cc
  HostName 45.83.105.15
  User git
  IdentityFile ~/.ssh/id_rsa
  Port 2202
  

# ~/.zshrc
zssh() {
  local host
  host=$(awk '
    BEGIN {
      printf "%-20s %-20s %-10s %-6s %-60s\n", "Host", "HostName", "User", "Port", "Desc"
      print "----------------------------------------------------------------------------------------------------"
    }
    {
      line=$0
      gsub(/^[ \t]+/, "", line)

      if(line ~ /^#/) {
        comment_lines[NR]=line
        next
      }

      if(line ~ /^Host[ \t]+/) {
        # собираем комментарии, которые идут строго перед текущим Host
        desc=""
        hide=0
        for(i=NR-1;i>0;i--){
          if(i in comment_lines){
            if(comment_lines[i] ~ /zssh-hide/) { hide=1; break }
            desc = comment_lines[i] " " desc
          } else break
        }

        # вывод предыдущего хоста
        if(h!="" && hide_prev!=1){
          printf "%-20s %-20s %-10s %-6s %-60s\n", h, hn, u, p, desc_prev
        }

        # новый хост
        h=$2; hn=""; u=""; p=""
        desc_prev=desc
        hide_prev=hide
        next
      }

      # ключи
      if(match(line, /^[Hh]ost[Nn]ame[ \t]+(.*)$/, arr)) { hn=arr[1]; next }
      if(match(line, /^User[ \t]+(.*)$/, arr))           { u=arr[1]; next }
      if(match(line, /^Port[ \t]+(.*)$/, arr))           { p=arr[1]; next }

    }
    END {
      # вывод последнего хоста
      if(h!="" && hide_prev!=1){
        printf "%-20s %-20s %-10s %-6s %-60s\n", h, hn, u, p, desc_prev
      }
    }
  ' ~/.ssh/config | fzf --height 40% --border)

  host=$(echo "$host" | awk '{print $1}')
  [[ -n "$host" ]] && ssh "$host"
}

Проверка результата:

zssh         # появится список хостов для выбора
ssh srv1     # ручная проверка соединения

Совет:
Не хранить пароли в ~/.ssh/config, использовать ssh-agent или ключи.