Вопрос или проблема
Я использую Mobaxterm и у меня много сеансов, поэтому я не могу вручную конвертировать все из них в формат конфигурации SSH, который выглядит так:
Mobaxterm
K8s-TEST - [127.0.0.1]=#109#0%127.0.0.1%22%tinnd%%-1%-1%%%22%%0%0%0%_ProfileDir_\secret\tinnd.ssh\tinnd.ppk%%-1%0%0%0%%1080%%0%0%1#Mono Nerd Font%14%0%0%0%15%248,248,242%39,40,34%255,128,0%3%-1%0%%xterm%-1%6%0,0,0%85,85,85%249,38,114%221,66,120%166,226,46%157,197,75%230,219,116%209,202,137%102,217,239%122,204,218%174,129,255%179,146,239%0,217,217%200,240,240%245,222,179%255,255,255%80%24%0%1%-1%<none>%%0#0# #-1
в -> Linux SSH .ssh/config
, я обращаю внимание только на Hostname
, IP
и port
,
Host K8S-TEST-MASTER-127.0.0.1
hostname 127.0.0.1
user tinnd
port 22
identityfile "/home/mint/.ssh/id_rsa"
или YAML/JSON, если это возможно.
1-й grep "tinnd.id_rsa" moba.sessions
используется для разделения SSH-сессий от других сессий, таких как RDP, VNC. Если ваш файл содержит только SSH-сессии, вы можете пропустить это или, пожалуйста, измените tinnd.id_rsa
2-й awk 'match($0, /#109#0.+?(?:bad(*FAIL)|%.+%tinnd)/) { print substr($0, 1, RSTART) substr($0, RSTART+7, RLENGTH-14) }'
Вы можете заменить ваше имя пользователя на моё имя пользователя tinnd
3-й sed 's/\=\#/\ /g' | sed 's/\ -\ /-/g' | sed 's/\=\ \#/\ /g' | sed 's/\ \]/\]/g' | sed 's/\ \[/\[/g' | sed 's/\%/\ /g'
Затем удалите пробелы, специальные символы в Hostname, если они есть, используя sed
4-й awk '{ system("storm add " $1 " tinnd@" $2 ":" $3 --id_file "~/.ssh/id_rsa")}
Наконец, добавьте эти хосты в .ssh/config, используя инструмент stormssh
, вам необходимо установить его с помощью pip install stormssh
сначала
Объедините все в одну команду
grep "tinnd.ssh" moba | awk 'match($0, /#109#0.+?(?:bad(*FAIL)|%..%tinnd)/) { print substr($0, 1, RSTART) substr($0, RSTART+7, RLENGTH-14) }' | sed 's/\=\#/\ /g' | sed 's/\ -\ /-/g' | sed 's/\=\ \#/\ /g' | sed 's/\ \]/\]/g' | sed 's/\ \[/\[/g' | sed 's/\%/\ /g' | awk '{ system("storm add " $1 " tinnd@" $2 ":" $3 --id_file "~/.ssh/id_rsa")}
Надеюсь, этот regex поможет тем, кто хочет перейти с Windows на Linux.
Ответ или решение
Конвертация сеансов MobaXterm в формат SSH конфигурации, а также в форматы YAML или JSON, может показаться сложной задачей при наличии большого количества сеансов. Однако с помощью текстовых утилит UNIX можно упростить этот процесс. Давайте рассмотрим шаги, которые помогут вам в этом.
1. Отбор необходимых сеансов SSH
Сначала сравните и отфильтруйте только те сессии, которые относятся к SSH. Для этого можно воспользоваться командой grep
, где вам необходимо указать уникальную часть, относящуюся к вашим SSH-сессиям:
grep "tinnd.id_rsa" moba.sessions
Если файл moba.sessions
содержит только SSH-сеансы, этот шаг можно пропустить.
2. Извлечение необходимых деталей из сессии
Далее необходимо использовать команду awk
для извлечения нужных данных, таких как имя хоста, IP-адрес и порт. Следующий пример команды будет эффективным:
awk 'match($0, /#109#0.+?(?:bad(*FAIL)|%.+%tinnd)/) { print substr($0, 1, RSTART) substr($0, RSTART+7, RLENGTH-14) }' moba.sessions
Замените tinnd
на свое имя пользователя по мере необходимости.
3. Очистка данных
Теперь мы отформатируем вывод и уберем лишние символы, используя команду sed
для упрощения структуры данных. Это можно сделать с помощью следующих команд:
sed 's/\=\#/\ /g' | sed 's/\ -\ /-/g' | sed 's/\=\ \#/\ /g' | sed 's/\ \]/\]/g' | sed 's/\ \[/\[/g' | sed 's/\%/\ /g'
После этого можно использовать sed
для удаления пробелов и специальных символов из имени хоста.
4. Добавление в SSH конфигурацию
Как только данные будут очищены и отформатированы, можно использовать awk
, чтобы добавить их в файл конфигурации SSH. Для этого воспользуемся следующим скриптом:
awk '{ system("storm add " $1 " tinnd@" $2 ":" $3 --id_file "~/.ssh/id_rsa") }'
Эта команда добавляет информацию о хостах в файл .ssh/config
с указанием имени пользователя и ключа.
5. Комбинирование всех шагов в одну команду
Чтобы упростить выполнение всех шагов, вы можете объединить все команды в одну строку:
grep "tinnd.ssh" moba.sessions | awk 'match($0, /#109#0.+?(?:bad(*FAIL)|%..%tinnd)/) { print substr($0, 1, RSTART) substr($0, RSTART+7, RLENGTH-14) }' | sed 's/\=\#/\ /g' | sed 's/\ -\ /-/g' | sed 's/\=\ \#/\ /g' | sed 's/\ \]/\]/g' | sed 's/\ \[/\[/g' | sed 's/\%/\ /g' | awk '{ system("storm add " $1 " tinnd@" $2 ":" $3 --id_file "~/.ssh/id_rsa") }'
Экспорт в YAML или JSON
Если вам необходимо преобразовать информацию в формат YAML или JSON, вы можете сделать это следующим образом:
YAML
awk '{ printf("host: %s\n hostname: %s\n user: tinnd\n port: %s\n\n", $1, $2, $3) }'
JSON
awk '{ printf("{ \"host\": \"%s\", \"hostname\": \"%s\", \"user\": \"tinnd\", \"port\": \"%s\" },\n", $1, $2, $3) }'
Вывод
Эти команды и шаги позволяют вам быстро и автоматически преобразовать ваши сеансы MobaXterm в необходимый формат для SSH или YAML/JSON. Применяя данные подходы, вы сможете сэкономить много времени и избежать ручного ввода.