👩💻 Коллекция шпаргалок по bash
👉 @i_odmin
find в Linux как инструмент для администрирования
find — утилита поиска файлов по имени и другим свойствам, используемая в UNIX‐подобных операционных системах. С лохматых тысячелетий есть и поддерживаться почти всеми из них.
Базовый синтаксис ключей
-name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки. Опция -name различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией -iname;
-type — тип искомого: f=файл, d=каталог, l=ссылка (link), p=канал (pipe), s=сокет;
-user — владелец: имя пользователя или UID;
-group — владелец: группа пользователя или GID;
-perm — указываются права доступа;
-size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом);
-atime — время последнего обращения к файлу (в днях);
-amin — время последнего обращения к файлу (в минутах);
-ctime — время последнего изменения владельца или прав доступа к файлу (в днях);
-cmin — время последнего изменения владельца или прав доступа к файлу (в минутах);
-mtime — время последнего изменения файла (в днях);
-mmin — время последнего изменения файла (в минутах);
-newer другой_файл — искать файлы созданные позже, чем другой_файл;
-delete — удалять найденные файлы;
-ls — генерирует вывод как команда ls -dgils;
-print — показывает на экране найденные файлы;
-print0 — выводит путь к текущему файлу на стандартный вывод, за которым следует символ ASCII NULL (код символа 0);
-exec command {} \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис;
-ok — перед выполнением команды указанной в -exec, выдаёт запрос;
-depth или -d — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога;
-maxdepth — максимальный уровень вложенности для поиска. «-maxdepth 0» ограничивает поиск текущим каталогом;
-prune — используется, когда вы хотите исключить из поиска определённые каталоги;
-mount или -xdev — не переходить на другие файловые системы;
-regex — искать по имени файла используя регулярные выражения;
-regextype тип — указание типа используемых регулярных выражений;
-P — не разворачивать символические ссылки (поведение по умолчанию);
-L — разворачивать символические ссылки;
-empty — только пустые каталоги.
Примеры использования
Ищем все файлы, начиная с текущей директории, название которых начинается на iodmin:
find . -name 'iodmin*'
Найти все файлы, начиная с корневой директории, название которых начинается на iodmin:
find / -name 'iodmin*'
Поиск в директориях /usr/local/man и /opt/local/man файлов, название которых начинается на iodmin:
find /usr/local/man /opt/local/man -name 'iodmin*'
Ищем графические файлы, начиная с текущего каталога (см.на кавычки):
find . -type f -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)"
Вывести список файлов (см. на / ) во всей файловой системе, чей размер больше 100 Мб:
find / -size +100M -print
Ищем файлы в указанных каталогах:
find /var/spool/postfix/{deferred,active,maildrop,incoming}/ -type f
👉 @i_odmin
find — утилита поиска файлов по имени и другим свойствам, используемая в UNIX‐подобных операционных системах. С лохматых тысячелетий есть и поддерживаться почти всеми из них.
Базовый синтаксис ключей
-name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки. Опция -name различает прописные и строчные буквы; чтобы использовать поиск без этих различий, воспользуйтесь опцией -iname;
-type — тип искомого: f=файл, d=каталог, l=ссылка (link), p=канал (pipe), s=сокет;
-user — владелец: имя пользователя или UID;
-group — владелец: группа пользователя или GID;
-perm — указываются права доступа;
-size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом);
-atime — время последнего обращения к файлу (в днях);
-amin — время последнего обращения к файлу (в минутах);
-ctime — время последнего изменения владельца или прав доступа к файлу (в днях);
-cmin — время последнего изменения владельца или прав доступа к файлу (в минутах);
-mtime — время последнего изменения файла (в днях);
-mmin — время последнего изменения файла (в минутах);
-newer другой_файл — искать файлы созданные позже, чем другой_файл;
-delete — удалять найденные файлы;
-ls — генерирует вывод как команда ls -dgils;
-print — показывает на экране найденные файлы;
-print0 — выводит путь к текущему файлу на стандартный вывод, за которым следует символ ASCII NULL (код символа 0);
-exec command {} \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис;
-ok — перед выполнением команды указанной в -exec, выдаёт запрос;
-depth или -d — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога;
-maxdepth — максимальный уровень вложенности для поиска. «-maxdepth 0» ограничивает поиск текущим каталогом;
-prune — используется, когда вы хотите исключить из поиска определённые каталоги;
-mount или -xdev — не переходить на другие файловые системы;
-regex — искать по имени файла используя регулярные выражения;
-regextype тип — указание типа используемых регулярных выражений;
-P — не разворачивать символические ссылки (поведение по умолчанию);
-L — разворачивать символические ссылки;
-empty — только пустые каталоги.
Примеры использования
Ищем все файлы, начиная с текущей директории, название которых начинается на iodmin:
find . -name 'iodmin*'
Найти все файлы, начиная с корневой директории, название которых начинается на iodmin:
find / -name 'iodmin*'
Поиск в директориях /usr/local/man и /opt/local/man файлов, название которых начинается на iodmin:
find /usr/local/man /opt/local/man -name 'iodmin*'
Ищем графические файлы, начиная с текущего каталога (см.на кавычки):
find . -type f -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)"
Вывести список файлов (см. на / ) во всей файловой системе, чей размер больше 100 Мб:
find / -size +100M -print
Ищем файлы в указанных каталогах:
find /var/spool/postfix/{deferred,active,maildrop,incoming}/ -type f
👉 @i_odmin
TUI 🌙
Показывает фазу Луны в виде ASCII-арта прямо в вашем терминале. Минималистично, гиковски и приятно.
https://github.com/rockydd/ascii_moon
👉 @i_odmin
Показывает фазу Луны в виде ASCII-арта прямо в вашем терминале. Минималистично, гиковски и приятно.
https://github.com/rockydd/ascii_moon
👉 @i_odmin
Ravada - Менеджер удаленных виртуальных рабочих столов
Это программа, позволяющая пользователю подключаться к удаленному виртуальному рабочему столу. Ravada предназначена для системных администраторов, имеющих некоторый опыт работы с GNU/Linux и желающих развернуть проект VDI.
Его внутренняя часть была разработана и реализована таким образом, чтобы обеспечить возможность добавления в фреймворк будущих гипервизоров. В настоящее время поддерживается KVM, в планах - LXC.
Требования к клиенту следующие: наличие web-браузера и программы удаленного просмотра, поддерживающей протокол spice.
В текущем релизе мы используем гипервизоры KVM: KVM в качестве бэкенда для виртуальных машин. Поддержка LXC находится в стадии разработки.
https://github.com/UPC/ravada
👉 @i_odmin
Это программа, позволяющая пользователю подключаться к удаленному виртуальному рабочему столу. Ravada предназначена для системных администраторов, имеющих некоторый опыт работы с GNU/Linux и желающих развернуть проект VDI.
Его внутренняя часть была разработана и реализована таким образом, чтобы обеспечить возможность добавления в фреймворк будущих гипервизоров. В настоящее время поддерживается KVM, в планах - LXC.
Требования к клиенту следующие: наличие web-браузера и программы удаленного просмотра, поддерживающей протокол spice.
В текущем релизе мы используем гипервизоры KVM: KVM в качестве бэкенда для виртуальных машин. Поддержка LXC находится в стадии разработки.
https://github.com/UPC/ravada
👉 @i_odmin
🕵️♂️ Мониторим изменения на сайтах как профи: Zabbix Browser Item
Забудьте о простых проверках статус-кода 200. Если вам нужно знать, обновился ли контент на странице, не пропала ли кнопка «Купить» или корректно ли отрендерился динамический блок на JS - новый Browser Item в Zabbix (начиная с версии 7.0) меняет правила игры.
Раньше для сложного веб-мониторинга требовались внешние скрипты или Selenium. Теперь Zabbix умеет запускать браузер «под капотом» (через Zabbix Browser Monitoring и Playwright).
Что умеет Browser Item:
✅ Рендеринг JS: Видит страницу так же, как пользователь, включая весь динамический контент.
✅ Сценарии на JavaScript: Можно прописать логику - зайти на сайт, нажать кнопку, подождать загрузки элемента и сравнить его текст.
✅ Контроль изменений: Сравнение хеш-суммы контента или поиск конкретных ключевых слов в DOM-дереве.
✅ Производительность: Сбор метрик загрузки (Core Web Vitals) прямо в процессе проверки.
Как это работает:
1. Настраиваете Zabbix Web Service.
2. Создаете Browser Item и пишете небольшой JS-сценарий (например, page.goto, page.textContent).
3. Парсите результат и вешаете триггер на изменение текста или структуры.
Это идеальное решение для мониторинга витрин интернет-магазинов, отслеживания обновлений ПО на сайтах вендоров или проверки работоспособности сложных личных кабинетов.
📖 https://blog.zabbix.com/monitoring-website-changes-with-zabbix-browser-item/31684/
👉 @i_odmin
Забудьте о простых проверках статус-кода 200. Если вам нужно знать, обновился ли контент на странице, не пропала ли кнопка «Купить» или корректно ли отрендерился динамический блок на JS - новый Browser Item в Zabbix (начиная с версии 7.0) меняет правила игры.
Раньше для сложного веб-мониторинга требовались внешние скрипты или Selenium. Теперь Zabbix умеет запускать браузер «под капотом» (через Zabbix Browser Monitoring и Playwright).
Что умеет Browser Item:
✅ Рендеринг JS: Видит страницу так же, как пользователь, включая весь динамический контент.
✅ Сценарии на JavaScript: Можно прописать логику - зайти на сайт, нажать кнопку, подождать загрузки элемента и сравнить его текст.
✅ Контроль изменений: Сравнение хеш-суммы контента или поиск конкретных ключевых слов в DOM-дереве.
✅ Производительность: Сбор метрик загрузки (Core Web Vitals) прямо в процессе проверки.
Как это работает:
1. Настраиваете Zabbix Web Service.
2. Создаете Browser Item и пишете небольшой JS-сценарий (например, page.goto, page.textContent).
3. Парсите результат и вешаете триггер на изменение текста или структуры.
Это идеальное решение для мониторинга витрин интернет-магазинов, отслеживания обновлений ПО на сайтах вендоров или проверки работоспособности сложных личных кабинетов.
📖 https://blog.zabbix.com/monitoring-website-changes-with-zabbix-browser-item/31684/
👉 @i_odmin
Работает и ладно 😀
👉 @i_odmin
👉 @i_odmin
Как сделать цветной вывод, используя grc (Generic Colourizer)
Он работает с множеством инструментов «из коробки» (df, lsblk, free, ps и другие).
Вы можете быстро установить его с помощью вашего менеджера пакетов, например:
$ sudo dnf install grc
Добавьте эти строки в ваш файл ~/.bashrc, если вы используете Bash:
GRC_ALIASES=true
[[ -s "/etc/profile.d/grc.sh" ]] && source /etc/profile.d/grc.sh
Затем перезагрузите вашу оболочку:
$ source ~/.bashrc
Для Zsh, добавьте это в ваш ~/.zshrc:
[[ -s "/etc/grc.zsh" ]] && source /etc/grc.zsh
Затем перезагрузите:
$ source ~/.zshrc
👉 @i_odmin
Он работает с множеством инструментов «из коробки» (df, lsblk, free, ps и другие).
Вы можете быстро установить его с помощью вашего менеджера пакетов, например:
$ sudo dnf install grc
Добавьте эти строки в ваш файл ~/.bashrc, если вы используете Bash:
GRC_ALIASES=true
[[ -s "/etc/profile.d/grc.sh" ]] && source /etc/profile.d/grc.sh
Затем перезагрузите вашу оболочку:
$ source ~/.bashrc
Для Zsh, добавьте это в ваш ~/.zshrc:
[[ -s "/etc/grc.zsh" ]] && source /etc/grc.zsh
Затем перезагрузите:
$ source ~/.zshrc
👉 @i_odmin
Голый Линукс — запуск ядра-одиночки
Итак, Linux - не операционная система, а только ядро для неё. Всё остальное приходит от проекта GNU (и других). И вот интересно - на что годится ядро само по себе?
Эта статья - очень "начального" уровня. Устроим маленький эксперимент - создадим чистую виртуальную машину и попробуем запустить ядро Linux "без всего". Или почти "без", т.к. нам понадобится загрузчик ОС - и какая-нибудь "пользовательская программа" (её мы сотворим сами). Конечно, продвинутые пользователи Linux такой "эксперимент" могут провести просто отредактировав параметры запуска при включении - но наш рассказ всё же для тех кто почти (или совсем) не в теме :)
Бонусом чуть-чуть коснёмся системных вызовов и пару слов скажем о других ядрах.
https://habr.com/ru/articles/855804/
👉 @i_odmin
Итак, Linux - не операционная система, а только ядро для неё. Всё остальное приходит от проекта GNU (и других). И вот интересно - на что годится ядро само по себе?
Эта статья - очень "начального" уровня. Устроим маленький эксперимент - создадим чистую виртуальную машину и попробуем запустить ядро Linux "без всего". Или почти "без", т.к. нам понадобится загрузчик ОС - и какая-нибудь "пользовательская программа" (её мы сотворим сами). Конечно, продвинутые пользователи Linux такой "эксперимент" могут провести просто отредактировав параметры запуска при включении - но наш рассказ всё же для тех кто почти (или совсем) не в теме :)
Бонусом чуть-чуть коснёмся системных вызовов и пару слов скажем о других ядрах.
https://habr.com/ru/articles/855804/
👉 @i_odmin
Как в утилите top в Linux посмотреть какой командой был запущен процесс?
В утилите top в Linux по умолчанию отображается только имя команды, запустившей процесс, но можно изменить отображение, чтобы увидеть полный командный путь.
Для этого в top выполните следующие шаги:
1. Запустите top:
top
2. Нажмите клавишу c (латинская c), находясь в top. Это переключит отображение с имени команды на полный путь запуска команды (вместе с аргументами).
Теперь в колонке COMMAND вы увидите полную строку запуска процесса, а не только его имя.
Для возврата к отображению только имени команды снова нажмите c.
👉 @i_odmin
В утилите top в Linux по умолчанию отображается только имя команды, запустившей процесс, но можно изменить отображение, чтобы увидеть полный командный путь.
Для этого в top выполните следующие шаги:
1. Запустите top:
top
2. Нажмите клавишу c (латинская c), находясь в top. Это переключит отображение с имени команды на полный путь запуска команды (вместе с аргументами).
Теперь в колонке COMMAND вы увидите полную строку запуска процесса, а не только его имя.
Для возврата к отображению только имени команды снова нажмите c.
👉 @i_odmin
Как найти количество открытых файлов в Linux
Чтобы узнать количество открытых файлов в Linux, можно воспользоваться следующими командами:
1. Использовать lsof (List Open Files) для подсчета открытых файлов в системе:
lsof | wc -l
Эта команда покажет общее количество открытых файлов в системе, где wc -l подсчитывает количество строк, то есть количество открытых файлов.
2. Использовать `/proc/sys/fs/file-nr` для просмотра счетчика открытых файлов:
cat /proc/sys/fs/file-nr
Этот файл содержит три числа, разделенные табуляцией:
- Первое число — текущее количество открытых файлов.
- Второе число — количество файлов, которые находятся в ожидании.
- Третье число — максимальное количество файлов, которое система может открыть.
3. Подсчитать открытые файлы для определенного процесса:
Если нужно узнать количество открытых файлов конкретного процесса, можно использовать:
lsof -p PID | wc -l
Замените PID на идентификатор процесса, который вас интересует.
4. Использовать lsof для подсчета открытых файлов конкретным пользователем:
lsof -u username | wc -l
Замените username на имя пользователя, чтобы увидеть количество открытых файлов этим пользователем.
👉 @i_odmin
Чтобы узнать количество открытых файлов в Linux, можно воспользоваться следующими командами:
1. Использовать lsof (List Open Files) для подсчета открытых файлов в системе:
lsof | wc -l
Эта команда покажет общее количество открытых файлов в системе, где wc -l подсчитывает количество строк, то есть количество открытых файлов.
2. Использовать `/proc/sys/fs/file-nr` для просмотра счетчика открытых файлов:
cat /proc/sys/fs/file-nr
Этот файл содержит три числа, разделенные табуляцией:
- Первое число — текущее количество открытых файлов.
- Второе число — количество файлов, которые находятся в ожидании.
- Третье число — максимальное количество файлов, которое система может открыть.
3. Подсчитать открытые файлы для определенного процесса:
Если нужно узнать количество открытых файлов конкретного процесса, можно использовать:
lsof -p PID | wc -l
Замените PID на идентификатор процесса, который вас интересует.
4. Использовать lsof для подсчета открытых файлов конкретным пользователем:
lsof -u username | wc -l
Замените username на имя пользователя, чтобы увидеть количество открытых файлов этим пользователем.
👉 @i_odmin
Linux-совет дня 💡
Запуск rm — рискованная операция.
Запуск rm с * — в 10 раз опаснее.
В некоторых случаях полезно заранее посмотреть, какую команду он выполнит после раскрытия шаблонов. Например:
$ echo rm -rf /*
Эта команда выведет в stdout уже развёрнутый результат — по сути, это «пробный запуск» (dry run) для rm -rf /*.
👉 @i_odmin
Запуск rm — рискованная операция.
Запуск rm с * — в 10 раз опаснее.
В некоторых случаях полезно заранее посмотреть, какую команду он выполнит после раскрытия шаблонов. Например:
$ echo rm -rf /*
Эта команда выведет в stdout уже развёрнутый результат — по сути, это «пробный запуск» (dry run) для rm -rf /*.
👉 @i_odmin
Подборка полезных скриптов для Mikrotik
Создание файла
невозможно создать файл напрямую, однако есть обходной путь:
/file print file=myFile
/file set myFile.txt contents=""
Проверка, изменился ли IP на интерфейсе
Иногда провайдер выдает динамические IP-адреса. Этот скрипт проверит, изменился ли динамический IP-адрес.
:global currentIP;
:local newIP [/ip address get [find interface="ether1"] address];
:if ($newIP != $currentIP) do={
:put "ip address $currentIP changed to $newIP";
:set currentIP $newIP;
}
Удаляем сетевую маску
Этот скрипт полезен, если вам нужен IP-адрес без сетевой маски (например, для использования в брандмауэре), но команда "/ip address get [id] address" возвращает IP-адрес вместе с маской.
:global ipaddress 10.1.101.1/24
:for i from=( [:len $ipaddress] - 1) to=0 do={
:if ( [:pick $ipaddress $i] = "/") do={
:put [:pick $ipaddress 0 $i]
}
}Еще один, гораздо более простой способ:
:global ipaddress 10.1.101.1/24
:put [:pick $ipaddress 0 [:find $ipaddress "/"]]
Определяем имя хоста
Многие пользователи просят добавить возможность использовать DNS-имена вместо IP-адресов для RADIUS-серверов, правил брандмауэра и т.д.
Вот пример того, как определить IP-адрес RADIUS-сервера.
Предположим, что у нас настроен RADIUS-сервер:
/radius
add address=3.4.5.6 comment=myRadА вот скрипт, который определит IP-адрес, сравнит полученный IP с настроенным и заменит его, если они не совпадают:
/system script add name="resolver" source= {
:local resolvedIP [:resolve "server.example.com"];
:local radiusID [/radius find comment="myRad"];
:local currentIP [/radius get $radiusID address];
:if ($resolvedIP != $currentIP) do={
/radius set $radiusID address=$resolvedIP;
/log info "radius ip updated";
}
}
Добавьте этот скрипт в планировщик, чтобы он выполнялся, например, каждые 5 минут.
/system scheduler add name=resolveRadiusIP on-event="resolver" interval=5m
Записать статистику очереди в несколько файлов
Рассмотрим, что названия очередей выглядят как "some text.1", чтобы мы могли искать очереди по последнему числу сразу после точки.
:local entriesPerFile 10;
:local currentQueue 0;
:local queuesInFile 0;
:local fileContent "";
#determine needed file count
:local numQueues [/queue simple print count-only] ;
:local fileCount ($numQueues / $entriesPerFile);
:if ( ($fileCount * $entriesPerFile) != $numQueues) do={
:set fileCount ($fileCount + 1);
}
#remove old files
/file remove [find name~"stats"];
:put "fileCount=$fileCount";
:for i from=1 to=$fileCount do={
#create file
/file print file="stats$i.txt";
#clear content
/file set [find name="stats$i.txt"] contents="";
:while ($queuesInFile < $entriesPerFile) do={
:if ($currentQueue < $numQueues) do={
:set currentQueue ($currentQueue +1);
:put $currentQueue ;
/queue simple
:local internalID [find name~"\\.$currentQueue\$"];
:put "internalID=$internalID";
:set fileContent ($fileContent . [get $internalID target-address] . \
" " . [get $internalID total-bytes] . "\r\n");
}
:set queuesInFile ($queuesInFile +1);
}
/file set "stats$i.txt" contents=$fileContent;
:set fileContent "";
:set queuesInFile 0;
}
👉 @i_odmin
Создание файла
невозможно создать файл напрямую, однако есть обходной путь:
/file print file=myFile
/file set myFile.txt contents=""
Проверка, изменился ли IP на интерфейсе
Иногда провайдер выдает динамические IP-адреса. Этот скрипт проверит, изменился ли динамический IP-адрес.
:global currentIP;
:local newIP [/ip address get [find interface="ether1"] address];
:if ($newIP != $currentIP) do={
:put "ip address $currentIP changed to $newIP";
:set currentIP $newIP;
}
Удаляем сетевую маску
Этот скрипт полезен, если вам нужен IP-адрес без сетевой маски (например, для использования в брандмауэре), но команда "/ip address get [id] address" возвращает IP-адрес вместе с маской.
:global ipaddress 10.1.101.1/24
:for i from=( [:len $ipaddress] - 1) to=0 do={
:if ( [:pick $ipaddress $i] = "/") do={
:put [:pick $ipaddress 0 $i]
}
}Еще один, гораздо более простой способ:
:global ipaddress 10.1.101.1/24
:put [:pick $ipaddress 0 [:find $ipaddress "/"]]
Определяем имя хоста
Многие пользователи просят добавить возможность использовать DNS-имена вместо IP-адресов для RADIUS-серверов, правил брандмауэра и т.д.
Вот пример того, как определить IP-адрес RADIUS-сервера.
Предположим, что у нас настроен RADIUS-сервер:
/radius
add address=3.4.5.6 comment=myRadА вот скрипт, который определит IP-адрес, сравнит полученный IP с настроенным и заменит его, если они не совпадают:
/system script add name="resolver" source= {
:local resolvedIP [:resolve "server.example.com"];
:local radiusID [/radius find comment="myRad"];
:local currentIP [/radius get $radiusID address];
:if ($resolvedIP != $currentIP) do={
/radius set $radiusID address=$resolvedIP;
/log info "radius ip updated";
}
}
Добавьте этот скрипт в планировщик, чтобы он выполнялся, например, каждые 5 минут.
/system scheduler add name=resolveRadiusIP on-event="resolver" interval=5m
Записать статистику очереди в несколько файлов
Рассмотрим, что названия очередей выглядят как "some text.1", чтобы мы могли искать очереди по последнему числу сразу после точки.
:local entriesPerFile 10;
:local currentQueue 0;
:local queuesInFile 0;
:local fileContent "";
#determine needed file count
:local numQueues [/queue simple print count-only] ;
:local fileCount ($numQueues / $entriesPerFile);
:if ( ($fileCount * $entriesPerFile) != $numQueues) do={
:set fileCount ($fileCount + 1);
}
#remove old files
/file remove [find name~"stats"];
:put "fileCount=$fileCount";
:for i from=1 to=$fileCount do={
#create file
/file print file="stats$i.txt";
#clear content
/file set [find name="stats$i.txt"] contents="";
:while ($queuesInFile < $entriesPerFile) do={
:if ($currentQueue < $numQueues) do={
:set currentQueue ($currentQueue +1);
:put $currentQueue ;
/queue simple
:local internalID [find name~"\\.$currentQueue\$"];
:put "internalID=$internalID";
:set fileContent ($fileContent . [get $internalID target-address] . \
" " . [get $internalID total-bytes] . "\r\n");
}
:set queuesInFile ($queuesInFile +1);
}
/file set "stats$i.txt" contents=$fileContent;
:set fileContent "";
:set queuesInFile 0;
}
👉 @i_odmin
Bash скрипт создания VPN-пользователя в MikroTik
Ниже пример скрипта, для создания VPN-пользователя в MikroTik. Мы будем использовать bash-скрипт, который подключается к устройству по SSH и добавляет нового пользователя для PPTP, L2TP или другого VPN-протокола. Перед использованием этого скрипта необходимо убедиться, что SSH-доступ к MikroTik настроен и вы можете выполнить команды от имени администратора.
Пример bash-скрипта для создания VPN-пользователя на MikroTik
#!/bin/bash
# Параметры подключения
MIKROTIK_IP="192.168.88.1" # IP-адрес MikroTik
MIKROTIK_USER="admin" # Логин администратора MikroTik
MIKROTIK_PASS="password" # Пароль администратора MikroTik
VPN_USER="newvpnuser" # Имя нового VPN-пользователя
VPN_PASS="newvpnpassword" # Пароль для нового VPN-пользователя
VPN_SERVICE="pptp" # Тип VPN (pptp, l2tp, ovpn и т.д.)
# Команда для создания VPN-пользователя
COMMAND="/ppp secret add name=$VPN_USER password=$VPN_PASS service=$VPN_SERVICE profile=default"
# Выполнение команды на MikroTik
sshpass -p "$MIKROTIK_PASS" ssh -o StrictHostKeyChecking=no $MIKROTIK_USER@$MIKROTIK_IP "$COMMAND"
if [ $? -eq 0 ]; then
echo "VPN-пользователь $VPN_USER успешно создан."
else
echo "Ошибка при создании VPN-пользователя."
fi
Описание параметров и команды
1. MIKROTIK_IP – IP-адрес устройства MikroTik.
2. MIKROTIK_USER и MIKROTIK_PASS – логин и пароль администратора.
3. VPN_USER и VPN_PASS – имя пользователя и пароль для нового VPN-пользователя.
4. VPN_SERVICE – тип VPN-сервиса, который вы используете. Возможные значения: pptp, l2tp, ovpn.
Как использовать
1. Убедитесь, что у вас установлен пакет sshpass для передачи пароля SSH (например, в Ubuntu его можно установить командой sudo apt install sshpass).
2. Сделайте скрипт исполняемым:
chmod +x create_vpn_user.sh
3. Запустите скрипт:
./create_vpn_user.sh
⚠️Замечания
- Безопасность: Для более безопасного подключения используйте SSH-ключи вместо передачи пароля в командной строке.
- Настройка профиля: Если у вас есть специальный профиль для VPN-пользователей, замените profile=default на нужный профиль, например profile=my-vpn-profile.
👉 @i_odmin
Ниже пример скрипта, для создания VPN-пользователя в MikroTik. Мы будем использовать bash-скрипт, который подключается к устройству по SSH и добавляет нового пользователя для PPTP, L2TP или другого VPN-протокола. Перед использованием этого скрипта необходимо убедиться, что SSH-доступ к MikroTik настроен и вы можете выполнить команды от имени администратора.
Пример bash-скрипта для создания VPN-пользователя на MikroTik
#!/bin/bash
# Параметры подключения
MIKROTIK_IP="192.168.88.1" # IP-адрес MikroTik
MIKROTIK_USER="admin" # Логин администратора MikroTik
MIKROTIK_PASS="password" # Пароль администратора MikroTik
VPN_USER="newvpnuser" # Имя нового VPN-пользователя
VPN_PASS="newvpnpassword" # Пароль для нового VPN-пользователя
VPN_SERVICE="pptp" # Тип VPN (pptp, l2tp, ovpn и т.д.)
# Команда для создания VPN-пользователя
COMMAND="/ppp secret add name=$VPN_USER password=$VPN_PASS service=$VPN_SERVICE profile=default"
# Выполнение команды на MikroTik
sshpass -p "$MIKROTIK_PASS" ssh -o StrictHostKeyChecking=no $MIKROTIK_USER@$MIKROTIK_IP "$COMMAND"
if [ $? -eq 0 ]; then
echo "VPN-пользователь $VPN_USER успешно создан."
else
echo "Ошибка при создании VPN-пользователя."
fi
Описание параметров и команды
1. MIKROTIK_IP – IP-адрес устройства MikroTik.
2. MIKROTIK_USER и MIKROTIK_PASS – логин и пароль администратора.
3. VPN_USER и VPN_PASS – имя пользователя и пароль для нового VPN-пользователя.
4. VPN_SERVICE – тип VPN-сервиса, который вы используете. Возможные значения: pptp, l2tp, ovpn.
Как использовать
1. Убедитесь, что у вас установлен пакет sshpass для передачи пароля SSH (например, в Ubuntu его можно установить командой sudo apt install sshpass).
2. Сделайте скрипт исполняемым:
chmod +x create_vpn_user.sh
3. Запустите скрипт:
./create_vpn_user.sh
⚠️Замечания
- Безопасность: Для более безопасного подключения используйте SSH-ключи вместо передачи пароля в командной строке.
- Настройка профиля: Если у вас есть специальный профиль для VPN-пользователей, замените profile=default на нужный профиль, например profile=my-vpn-profile.
👉 @i_odmin
Совет 💡
Как остановить выполнение скрипта в bash при возникновении ошибки в команде?
Команда set -e завершит скрипт с ошибкой, в случае, если в нижеследующем bash коде будет обнаружена ошибка. По-умолчанию bash скрипт продолжает работу, если в ходе выполнения возникла ошибка.
👉 @i_odmin
Как остановить выполнение скрипта в bash при возникновении ошибки в команде?
Команда set -e завершит скрипт с ошибкой, в случае, если в нижеследующем bash коде будет обнаружена ошибка. По-умолчанию bash скрипт продолжает работу, если в ходе выполнения возникла ошибка.
👉 @i_odmin
Шпаргалка по PowerShell
Основные команды
- Get-Help <команда> – получить справку по команде
- Get-Command – список доступных команд
- Get-Command -Module <модуль> – команды из конкретного модуля
- Get-Alias – список псевдонимов команд
- Get-Process – список запущенных процессов
- Get-Service – список служб
Навигация по файловой системе
- Get-Location – текущий путь
- Set-Location <путь> – перейти к каталогу
- Get-ChildItem или ls – просмотр содержимого каталога
- New-Item -Path <путь> -Name <имя> -ItemType <тип> – создать файл или папку
Работа с файлами и папками
- Copy-Item -Path <источник> -Destination <назначение> – копировать файл/папку
- Move-Item -Path <источник> -Destination <назначение> – переместить файл/папку
- Remove-Item -Path <путь> – удалить файл/папку
- Rename-Item -Path <путь> -NewName <новое имя> – переименовать файл/папку
Работа с текстом и выводом
- Write-Output "текст" – вывод текста
- Write-Host "текст" – вывод текста на экран
- Read-Host -Prompt "вопрос" – ввод данных от пользователя
- Get-Content <файл> – чтение содержимого файла
- Set-Content <файл> – запись в файл
- Add-Content <файл> – добавление текста в файл
Переменные
- $<имя_переменной> = значение – создание переменной
- $var += значение – добавление к значению переменной
- $null – пустое значение
Условия и циклы
- if (<условие>) { <действие> } – условие if
- foreach ($item in $array) { <действие> } – цикл foreach
- while (<условие>) { <действие> } – цикл while
Работа с процессами и службами
- Start-Process <программа> – запуск программы
- Stop-Process -Name <имя> – завершение процесса
- Start-Service <служба> – запуск службы
- Stop-Service <служба> – остановка службы
Фильтрация и сортировка
- Where-Object { <условие> } – фильтрация объектов
- Sort-Object <свойство> – сортировка объектов
Примеры:
1. Получение списка файлов:
Get-ChildItem -Path "C:\папка"
2. Копирование файла:
Copy-Item -Path "C:\путь\файл.txt" -Destination "D:\копия\файл.txt"
3. Вывод чисел от 1 до 10:
for ($i = 1; $i -le 10; $i++) { Write-Output $i }
4. Фильтрация процессов по имени:
Get-Process | Where-Object { $_.Name -eq "notepad" }
👉 @i_odmin
Основные команды
- Get-Help <команда> – получить справку по команде
- Get-Command – список доступных команд
- Get-Command -Module <модуль> – команды из конкретного модуля
- Get-Alias – список псевдонимов команд
- Get-Process – список запущенных процессов
- Get-Service – список служб
Навигация по файловой системе
- Get-Location – текущий путь
- Set-Location <путь> – перейти к каталогу
- Get-ChildItem или ls – просмотр содержимого каталога
- New-Item -Path <путь> -Name <имя> -ItemType <тип> – создать файл или папку
Работа с файлами и папками
- Copy-Item -Path <источник> -Destination <назначение> – копировать файл/папку
- Move-Item -Path <источник> -Destination <назначение> – переместить файл/папку
- Remove-Item -Path <путь> – удалить файл/папку
- Rename-Item -Path <путь> -NewName <новое имя> – переименовать файл/папку
Работа с текстом и выводом
- Write-Output "текст" – вывод текста
- Write-Host "текст" – вывод текста на экран
- Read-Host -Prompt "вопрос" – ввод данных от пользователя
- Get-Content <файл> – чтение содержимого файла
- Set-Content <файл> – запись в файл
- Add-Content <файл> – добавление текста в файл
Переменные
- $<имя_переменной> = значение – создание переменной
- $var += значение – добавление к значению переменной
- $null – пустое значение
Условия и циклы
- if (<условие>) { <действие> } – условие if
- foreach ($item in $array) { <действие> } – цикл foreach
- while (<условие>) { <действие> } – цикл while
Работа с процессами и службами
- Start-Process <программа> – запуск программы
- Stop-Process -Name <имя> – завершение процесса
- Start-Service <служба> – запуск службы
- Stop-Service <служба> – остановка службы
Фильтрация и сортировка
- Where-Object { <условие> } – фильтрация объектов
- Sort-Object <свойство> – сортировка объектов
Примеры:
1. Получение списка файлов:
Get-ChildItem -Path "C:\папка"
2. Копирование файла:
Copy-Item -Path "C:\путь\файл.txt" -Destination "D:\копия\файл.txt"
3. Вывод чисел от 1 до 10:
for ($i = 1; $i -le 10; $i++) { Write-Output $i }
4. Фильтрация процессов по имени:
Get-Process | Where-Object { $_.Name -eq "notepad" }
👉 @i_odmin
Сброс сетевых настроек из командной строки Windows
Сбросьте кэш DNS
ipconfig /flushdns
Сбросьте настройки WinSock
netsh winsock reset
Сброс настроек стека TCP/IP
netsh int ip reset
Для сброса настроек TCP/IPv6
netsh int ipv6 reset
Удалить все сетевые адаптеры
netcfg -d
Сброс всех правил Windows Defender Firewall
netsh advfirewall reset
👉 @i_odmin
Сбросьте кэш DNS
ipconfig /flushdns
Сбросьте настройки WinSock
netsh winsock reset
Сброс настроек стека TCP/IP
netsh int ip reset
Для сброса настроек TCP/IPv6
netsh int ipv6 reset
Удалить все сетевые адаптеры
netcfg -d
Сброс всех правил Windows Defender Firewall
netsh advfirewall reset
👉 @i_odmin
💻 Ноутбук от Sony 1986 года выпуска, а не эти ваши макбуки 😉
👉 @i_odmin
👉 @i_odmin
htop и многое другое на пальцах
На протяжении долгого времени я не до конца понимал htop. Я думал, что средняя загрузка [load average] в 1.0 означает, что процессор загружен на 50%, но это не совсем так. Да и потом, почему именно 1.0?
Затем я решил во всём разобраться и написать об этом. Говорят, что лучший способ научиться новому — попытаться это объяснить.
Rus https://habr.com/ru/articles/316806/
Eng https://peteris.rocks/blog/htop/
👉 @i_odmin
На протяжении долгого времени я не до конца понимал htop. Я думал, что средняя загрузка [load average] в 1.0 означает, что процессор загружен на 50%, но это не совсем так. Да и потом, почему именно 1.0?
Затем я решил во всём разобраться и написать об этом. Говорят, что лучший способ научиться новому — попытаться это объяснить.
Rus https://habr.com/ru/articles/316806/
Eng https://peteris.rocks/blog/htop/
👉 @i_odmin
Пробрасываем USB-устройство по сети в Линуксе
В Линуксе проброс USB устройств через сеть реализован на уровне ядра, то есть это не какая-то специальная программа, которая этим занимается, а драйвер в ядре.
И если этого драйвера в ядре нет (а его может и не быть — не вкомпилировал вендор, решил что не надо — имеет право) — то работать ничего, конечно, не будет.
Можно самостоятельно пересобрать ядро ручками, но это задача не для всех, поэтому таким мы заниматься не станем.
Будем считать, что ядро нормальное.
https://habr.com/ru/articles/969736/
👉 @i_odmin
В Линуксе проброс USB устройств через сеть реализован на уровне ядра, то есть это не какая-то специальная программа, которая этим занимается, а драйвер в ядре.
И если этого драйвера в ядре нет (а его может и не быть — не вкомпилировал вендор, решил что не надо — имеет право) — то работать ничего, конечно, не будет.
Можно самостоятельно пересобрать ядро ручками, но это задача не для всех, поэтому таким мы заниматься не станем.
Будем считать, что ядро нормальное.
https://habr.com/ru/articles/969736/
👉 @i_odmin
Шпаргалка по основным командам и настройкам MikroTik (RouterOS)
1. Основные команды работы с MikroTik:
Просмотр конфигурации
- /export — экспорт текущей конфигурации.
- /interface print — вывод списка интерфейсов.
- /ip address print — вывод списка IP-адресов.
- /ip route print — вывод таблицы маршрутизации.
- /ip firewall filter print — вывод правил файрвола.
Управление интерфейсами
- /interface enable [имя_интерфейса] — включить интерфейс.
- /interface disable [имя_интерфейса] — отключить интерфейс.
- /interface set [имя_интерфейса] mtu=1500 — изменение MTU на интерфейсе.
Управление IP-адресами
- /ip address add address=192.168.1.1/24 interface=[имя_интерфейса] — добавить IP-адрес на интерфейс.
- /ip address remove [номер] — удалить IP-адрес по номеру из списка.
Настройка маршрутизации
- /ip route add dst-address=0.0.0.0/0 gateway=[ip-шлюза] — добавить маршрут по умолчанию (интернет).
- /ip route remove [номер] — удалить маршрут.
2. Настройка DHCP:
Настройка DHCP-сервера
- /ip dhcp-server setup — пошаговая настройка DHCP-сервера.
- /ip dhcp-server print — просмотр текущих DHCP-серверов.
- /ip dhcp-server lease print — просмотр выданных IP-адресов (lease).
- /ip dhcp-server network add address=192.168.1.0/24 gateway=192.168.1.1 — добавить сеть для раздачи IP-адресов.
Настройка DHCP-клиента
- /ip dhcp-client add interface=[имя_интерфейса] — добавить DHCP-клиента на интерфейс.
- /ip dhcp-client print — просмотр DHCP-клиентов.
3. Настройка NAT (для интернета):
- /ip firewall nat add chain=srcnat action=masquerade out-interface=[интерфейс_WAN] — добавить правило NAT для выхода в интернет.
4. Настройка VLAN:
- /interface vlan add name=vlan10 vlan-id=10 interface=[имя_интерфейса] — создать VLAN с идентификатором 10 на интерфейсе.
- /interface bridge vlan add bridge=[имя_моста] tagged=[интерфейс] vlan-ids=10 — добавить VLAN в мост.
5. Настройка Firewall (Базовые правила):
- /ip firewall filter add chain=input action=accept connection-state=established,related — разрешить уже установленные соединения.
- /ip firewall filter add chain=input action=drop connection-state=invalid — отбросить невалидные пакеты.
- /ip firewall filter add chain=forward action=drop connection-state=invalid — запретить невалидные соединения в цепочке forward.
6. Настройка PPPoE (подключение к интернету через PPPoE):
- /interface pppoe-client add name=pppoe-out1 user=[логин] password=[пароль] interface=[WAN-интерфейс] — создать PPPoE-клиента.
- /ip route add gateway=pppoe-out1 — добавить маршрут через PPPoE.
7. Сохранение и восстановление конфигурации:
Сохранение:
- /system backup save name=[имя_файла] — сохранить полную конфигурацию.
- /export file=[имя_файла] — экспорт конфигурации в текстовый файл.
Восстановление:
- /system backup load name=[имя_файла] — загрузить сохраненную конфигурацию.
- /import file=[имя_файла] — импортировать текстовую конфигурацию.
8. Диагностика:
- /ping [ip-адрес] — пинг IP-адреса.
- /tool traceroute [ip-адрес] — трассировка до IP-адреса.
- /tool bandwidth-test address=[ip-адрес] direction=both — тест скорости соединения.
9. Работа с пользователями:
- /user add name=[имя_пользователя] group=full password=[пароль] — добавить пользователя с полными правами.
- /user remove [имя_пользователя] — удалить пользователя.
- /user print — показать список пользователей.
0. Операции с логами:
- /log print — просмотр последних логов.
- /log print where topics~"[firewall]" — просмотр логов по определенной теме, например, firewall.
👉 @i_odmin
1. Основные команды работы с MikroTik:
Просмотр конфигурации
- /export — экспорт текущей конфигурации.
- /interface print — вывод списка интерфейсов.
- /ip address print — вывод списка IP-адресов.
- /ip route print — вывод таблицы маршрутизации.
- /ip firewall filter print — вывод правил файрвола.
Управление интерфейсами
- /interface enable [имя_интерфейса] — включить интерфейс.
- /interface disable [имя_интерфейса] — отключить интерфейс.
- /interface set [имя_интерфейса] mtu=1500 — изменение MTU на интерфейсе.
Управление IP-адресами
- /ip address add address=192.168.1.1/24 interface=[имя_интерфейса] — добавить IP-адрес на интерфейс.
- /ip address remove [номер] — удалить IP-адрес по номеру из списка.
Настройка маршрутизации
- /ip route add dst-address=0.0.0.0/0 gateway=[ip-шлюза] — добавить маршрут по умолчанию (интернет).
- /ip route remove [номер] — удалить маршрут.
2. Настройка DHCP:
Настройка DHCP-сервера
- /ip dhcp-server setup — пошаговая настройка DHCP-сервера.
- /ip dhcp-server print — просмотр текущих DHCP-серверов.
- /ip dhcp-server lease print — просмотр выданных IP-адресов (lease).
- /ip dhcp-server network add address=192.168.1.0/24 gateway=192.168.1.1 — добавить сеть для раздачи IP-адресов.
Настройка DHCP-клиента
- /ip dhcp-client add interface=[имя_интерфейса] — добавить DHCP-клиента на интерфейс.
- /ip dhcp-client print — просмотр DHCP-клиентов.
3. Настройка NAT (для интернета):
- /ip firewall nat add chain=srcnat action=masquerade out-interface=[интерфейс_WAN] — добавить правило NAT для выхода в интернет.
4. Настройка VLAN:
- /interface vlan add name=vlan10 vlan-id=10 interface=[имя_интерфейса] — создать VLAN с идентификатором 10 на интерфейсе.
- /interface bridge vlan add bridge=[имя_моста] tagged=[интерфейс] vlan-ids=10 — добавить VLAN в мост.
5. Настройка Firewall (Базовые правила):
- /ip firewall filter add chain=input action=accept connection-state=established,related — разрешить уже установленные соединения.
- /ip firewall filter add chain=input action=drop connection-state=invalid — отбросить невалидные пакеты.
- /ip firewall filter add chain=forward action=drop connection-state=invalid — запретить невалидные соединения в цепочке forward.
6. Настройка PPPoE (подключение к интернету через PPPoE):
- /interface pppoe-client add name=pppoe-out1 user=[логин] password=[пароль] interface=[WAN-интерфейс] — создать PPPoE-клиента.
- /ip route add gateway=pppoe-out1 — добавить маршрут через PPPoE.
7. Сохранение и восстановление конфигурации:
Сохранение:
- /system backup save name=[имя_файла] — сохранить полную конфигурацию.
- /export file=[имя_файла] — экспорт конфигурации в текстовый файл.
Восстановление:
- /system backup load name=[имя_файла] — загрузить сохраненную конфигурацию.
- /import file=[имя_файла] — импортировать текстовую конфигурацию.
8. Диагностика:
- /ping [ip-адрес] — пинг IP-адреса.
- /tool traceroute [ip-адрес] — трассировка до IP-адреса.
- /tool bandwidth-test address=[ip-адрес] direction=both — тест скорости соединения.
9. Работа с пользователями:
- /user add name=[имя_пользователя] group=full password=[пароль] — добавить пользователя с полными правами.
- /user remove [имя_пользователя] — удалить пользователя.
- /user print — показать список пользователей.
0. Операции с логами:
- /log print — просмотр последних логов.
- /log print where topics~"[firewall]" — просмотр логов по определенной теме, например, firewall.
👉 @i_odmin
Знали ли вы, что можно открывать man-страницы из Vim?
- leader K - Нажмите курсором на любом слове, чтобы открыть man-страницу для этой команды.
- :Man command - Открыть man-страницу этой команды
👉 @i_odmin
- leader K - Нажмите курсором на любом слове, чтобы открыть man-страницу для этой команды.
- :Man command - Открыть man-страницу этой команды
👉 @i_odmin
Китайская мудрость для системного администратора
🪩 Всех с пятницей!
👉 @i_odmin
🪩 Всех с пятницей!
👉 @i_odmin
Быстрая настройка маршрутизатора MIkroTik для офиса и дома
В данном видео приводится пример по настройке маршрутизатора под управление ОС MikroTik RouterOS для малого офиса или дома. Настройка производится с помощью функции Quick Set и не занимает много времени. Полученная конфигурация обеспечивает стабильную работу и приемлемый уровень безопасности.
источник
👉 @i_odmin
В данном видео приводится пример по настройке маршрутизатора под управление ОС MikroTik RouterOS для малого офиса или дома. Настройка производится с помощью функции Quick Set и не занимает много времени. Полученная конфигурация обеспечивает стабильную работу и приемлемый уровень безопасности.
источник
👉 @i_odmin
Шпаргалка Mikrotik Config
Я документирую процесс подключения и настройки общих сценариев здесь для всех, кто интересуется Mikrotik
https://codingpackets.com/blog/mikrotik-config-cheatsheet/
👉 @i_odmin
Я документирую процесс подключения и настройки общих сценариев здесь для всех, кто интересуется Mikrotik
https://codingpackets.com/blog/mikrotik-config-cheatsheet/
👉 @i_odmin
Траблшутинг сетевых сервисов.Инструменты и утилиты для диагностики
🔹Общий вид алгоритма поиска и устранения неисправностей и корреляция с моделью ISO/OSI
🔹Диагностика физического и канального уровней модели ISO/OSI и проверка связности
🔹Диагностика сетевого уровня, если сервис за пределами локальной сети
🔹Диагностика транспорта на уровне сокетов
🔹Диагностика верхних уровней модели ISO/OSI
источник
👉 @i_odmin
🔹Общий вид алгоритма поиска и устранения неисправностей и корреляция с моделью ISO/OSI
🔹Диагностика физического и канального уровней модели ISO/OSI и проверка связности
🔹Диагностика сетевого уровня, если сервис за пределами локальной сети
🔹Диагностика транспорта на уровне сокетов
🔹Диагностика верхних уровней модели ISO/OSI
источник
👉 @i_odmin
🔥 Современный процесс загрузки Linux
Вот как выглядит современный boot-процесс - от нажатия кнопки питания до полностью работающей ОС:
1️⃣ Power On
Сигнал запуска подаётся на оборудование - начинается инициализация.
2️⃣ BIOS/UEFI
Загружается прошивка, выполняет POST-проверки и подготавливает железо.
3️⃣ Поиск оборудования
Определяются CPU, память, диски и остальные устройства.
4️⃣ Выбор загрузочного устройства
BIOS/UEFI ищет, откуда грузиться: HDD, SSD, USB, сеть и др.
5️⃣ Поиск EFI-раздела (в UEFI-системах)
Именно здесь располагаются загрузочные файлы ОС.
6️⃣ Запуск загрузчика (обычно GRUB2)
Загрузчик предоставляет меню систем или автоматически выбирает ядро.
7️⃣ Определение ядра для загрузки
GRUB читает конфигурацию и выбирает нужное Linux-ядро.
8️⃣ Загрузка ядра в память
Ядро — сердце Linux: инициализация памяти, драйверов, управления ресурсами.
9️⃣ Инициализация структур ядра
Подготовка окружения для запуска пользовательского пространства.
🔟 Запуск init/systemd (PID 1)
Запускается первый пользовательский процесс, управляющий службами.
1️⃣1️⃣ Выполнение стартовых скриптов
Настраивается сеть, монтируются файловые системы, поднимаются службы.
1️⃣2️⃣ Рабочая система
Linux полностью загружен - пользователь может логиниться и работать
👉 @i_odmin
Вот как выглядит современный boot-процесс - от нажатия кнопки питания до полностью работающей ОС:
1️⃣ Power On
Сигнал запуска подаётся на оборудование - начинается инициализация.
2️⃣ BIOS/UEFI
Загружается прошивка, выполняет POST-проверки и подготавливает железо.
3️⃣ Поиск оборудования
Определяются CPU, память, диски и остальные устройства.
4️⃣ Выбор загрузочного устройства
BIOS/UEFI ищет, откуда грузиться: HDD, SSD, USB, сеть и др.
5️⃣ Поиск EFI-раздела (в UEFI-системах)
Именно здесь располагаются загрузочные файлы ОС.
6️⃣ Запуск загрузчика (обычно GRUB2)
Загрузчик предоставляет меню систем или автоматически выбирает ядро.
7️⃣ Определение ядра для загрузки
GRUB читает конфигурацию и выбирает нужное Linux-ядро.
8️⃣ Загрузка ядра в память
Ядро — сердце Linux: инициализация памяти, драйверов, управления ресурсами.
9️⃣ Инициализация структур ядра
Подготовка окружения для запуска пользовательского пространства.
🔟 Запуск init/systemd (PID 1)
Запускается первый пользовательский процесс, управляющий службами.
1️⃣1️⃣ Выполнение стартовых скриптов
Настраивается сеть, монтируются файловые системы, поднимаются службы.
1️⃣2️⃣ Рабочая система
Linux полностью загружен - пользователь может логиниться и работать
👉 @i_odmin
Защита Mikrotik от внешних угроз
— Почему не хватает firewall для защиты mikrotik.
— Почему не хватает защиты в /ip services.
— Как использовать службу neighbor.
— Как использовать tool mac server.
— Общие рекомендации по защите.
— Почему у нас не взломали ни одного роутера.
— Как и когда правильно обновлять.
источник
👉 @i_odmin
— Почему не хватает firewall для защиты mikrotik.
— Почему не хватает защиты в /ip services.
— Как использовать службу neighbor.
— Как использовать tool mac server.
— Общие рекомендации по защите.
— Почему у нас не взломали ни одного роутера.
— Как и когда правильно обновлять.
источник
👉 @i_odmin
🔥 Продвинутые Wireshark-фильтры для VoIP/SIP/RTP
Если работаешь с телефонией, WebRTC, SIP-трафиком или качеством голоса - эти фильтры незаменимы.
📞 1. SIP-сигнализация
⚫️ sip
Показать весь SIP-трафик.
⚫️ sip.Method == "INVITE"
Начало звонка.
⚫️ sip.Method == "REGISTER"
Регистрация телефонов.
⚫️ sip.Status-Code >= 400
Ошибки SIP (4xx, 5xx, 6xx).
⚫️ sip.Authorization
Попытки авторизации — полезно при анализе взломов.
⚫️ sip.CSeq.method == "BYE"
Завершение вызова.
⚫️ sip.To.user == "1001"
Вызовы к абоненту 1001.
🎤 2. RTP - потоковая передача голоса
⚫️ rtp
Показать весь RTP-трафик.
⚫️ rtp.marker == 1
Начало речевых пакетов.
⚫️ rtp.ssrc == 0x12345678
Выбор конкретного голосового потока.
⚫️ rtp.seq < 1000
Начальная часть RTP-потока.
⚫️ udp.port == 5004
Стандартный RTP порт.
⚠️ 3. Потери пакетов, джиттер, рассинхрон
Эта часть критична для диагностики “роботизированного” голоса, пауз и обрывов.
⚫️ rtp.analysis.lost_packet
Показать потерянные RTP-пакеты.
⚫️ rtp.analysis.jitter > 30
Высокий джиттер (>30 мс).
⚫️ rtp.time_delta > 0.1
Межпакетные задержки >100 мс.
⚫️ rtp.seq_too_large_delta
Большие скачки номеров последовательности.
⚫️ udp.length < 180
Аномально маленькие голосовые пакеты.
🔒 4. SRTP - защищённый голос
⚫️ srtp
Показать SRTP-трафик.
⚫️ srtp.error
Ошибки расшифровки/валидации.
⚫️ srtp.payload.size > 200
Нетипично большие SRTP-фреймы.
📡 5. WebRTC / VoIP через браузер
⚫️ stun
STUN-трафик (установление медиа-канала).
⚫️ stun.type == 0x0001
STUN Binding Request.
⚫️ turn
TURN-трафик через relay (важно для NAT).
⚫️ webrtc-datachannel
WebRTC data channel.
⚫️ udp.port >= 10000 and udp.port <= 20000
Типичный диапазон WebRTC RTP/RTCP.
🎧 6. Полный разбор качества разговора
⚫️ rtcp
Показать RTCP-пакеты (метрики качества).
⚫️ rtcp.ssrc == 0x12345678
Анализ качества конкретного RTP-потока.
⚫️ rtcp.packet_type == 200
Sender Report.
⚫️ rtcp.packet_type == 201
Receiver Report (потери, джиттер).
⚫️ rtcp.xr
Расширенные отчёты (MOS, RTT, дисперсия джиттера).
📞 7. Поиск попыток взлома SIP
⚫️ sip.Method == "OPTIONS"
Сканы SIP-серверов.
⚫️ sip.Authorization
Брутфорс логинов.
⚫️ sip.Contact contains "sip:"
Аномальные SIP-контакты.
⚫️ sip.to.host != sip.from.host
Антиспуфинг SIP.
📲 Мы в MAX
👉 @i_odmin
Если работаешь с телефонией, WebRTC, SIP-трафиком или качеством голоса - эти фильтры незаменимы.
📞 1. SIP-сигнализация
⚫️ sip
Показать весь SIP-трафик.
⚫️ sip.Method == "INVITE"
Начало звонка.
⚫️ sip.Method == "REGISTER"
Регистрация телефонов.
⚫️ sip.Status-Code >= 400
Ошибки SIP (4xx, 5xx, 6xx).
⚫️ sip.Authorization
Попытки авторизации — полезно при анализе взломов.
⚫️ sip.CSeq.method == "BYE"
Завершение вызова.
⚫️ sip.To.user == "1001"
Вызовы к абоненту 1001.
🎤 2. RTP - потоковая передача голоса
⚫️ rtp
Показать весь RTP-трафик.
⚫️ rtp.marker == 1
Начало речевых пакетов.
⚫️ rtp.ssrc == 0x12345678
Выбор конкретного голосового потока.
⚫️ rtp.seq < 1000
Начальная часть RTP-потока.
⚫️ udp.port == 5004
Стандартный RTP порт.
⚠️ 3. Потери пакетов, джиттер, рассинхрон
Эта часть критична для диагностики “роботизированного” голоса, пауз и обрывов.
⚫️ rtp.analysis.lost_packet
Показать потерянные RTP-пакеты.
⚫️ rtp.analysis.jitter > 30
Высокий джиттер (>30 мс).
⚫️ rtp.time_delta > 0.1
Межпакетные задержки >100 мс.
⚫️ rtp.seq_too_large_delta
Большие скачки номеров последовательности.
⚫️ udp.length < 180
Аномально маленькие голосовые пакеты.
🔒 4. SRTP - защищённый голос
⚫️ srtp
Показать SRTP-трафик.
⚫️ srtp.error
Ошибки расшифровки/валидации.
⚫️ srtp.payload.size > 200
Нетипично большие SRTP-фреймы.
📡 5. WebRTC / VoIP через браузер
⚫️ stun
STUN-трафик (установление медиа-канала).
⚫️ stun.type == 0x0001
STUN Binding Request.
⚫️ turn
TURN-трафик через relay (важно для NAT).
⚫️ webrtc-datachannel
WebRTC data channel.
⚫️ udp.port >= 10000 and udp.port <= 20000
Типичный диапазон WebRTC RTP/RTCP.
🎧 6. Полный разбор качества разговора
⚫️ rtcp
Показать RTCP-пакеты (метрики качества).
⚫️ rtcp.ssrc == 0x12345678
Анализ качества конкретного RTP-потока.
⚫️ rtcp.packet_type == 200
Sender Report.
⚫️ rtcp.packet_type == 201
Receiver Report (потери, джиттер).
⚫️ rtcp.xr
Расширенные отчёты (MOS, RTT, дисперсия джиттера).
📞 7. Поиск попыток взлома SIP
⚫️ sip.Method == "OPTIONS"
Сканы SIP-серверов.
⚫️ sip.Authorization
Брутфорс логинов.
⚫️ sip.Contact contains "sip:"
Аномальные SIP-контакты.
⚫️ sip.to.host != sip.from.host
Антиспуфинг SIP.
📲 Мы в MAX
👉 @i_odmin
Сравнение SHELLs: BASH vs ZSH vs FISH
Делаем красочный и удобный терминал.
источник
👉 @i_odmin
Делаем красочный и удобный терминал.
источник
👉 @i_odmin
🔥 Подборка самых полезных фильтров для Wireshark
Если нужно быстро найти нужный трафик в большом дампе — эти фильтры экономят кучу времени. Сохраняй себе и используй прямо в работе!
🧩 IP-фильтрация
️ip.addr == 10.0.0.0/24 - весь трафик внутри подсети.
️ip.addr == 10.0.0.1 - весь трафик к/от конкретного хоста.
️!(ip.addr == 10.0.0.1) - исключить трафик определённого хоста.
📡 Протоколы и типы пакетов
️icmp.type == 3 - ICMP “destination unreachable”.
️tcp or udp - показать только TCP/UDP.
️http or dns - весь HTTP или DNS трафик.
🔌 TCP-фильтры
️tcp.port == 80 - трафик по порту 80.
️tcp.srcport < 1000 - исходящие порты <1000.
️tcp.flags.syn == 1 - пакеты с SYN.
️tcp.flags == 0x012 - SYN+ACK.
️tcp.analysis.retransmission - ретрансмиссии.
🌐 HTTP-фильтры
️http.request.method == "GET" - HTTP GET.
️http.response.code == 404 - ответы 404.
️http.host == "www.abc.com" - фильтр по Host.
🔐 TLS
️tls.handshake — только рукопожатие TLS.
️tls.handshake.type == 1 - Client Hello.
🔎 DNS
️dns.resp.name == cnn.com - ответы DNS для домена.
🧱 Полезные универсальные фильтры
️frame contains keyword - поиск по содержимому.
️frame.len > 1000 - пакеты >1000 байт.
🟨 DHCP
️dhcp and ip.addr == 10.0.0.0/24 - DHCP внутри подсети.
️dhcp.hw.mac_addr == 00:11:22:33:44:55 - DHCP по MAC-адресу.
🔁 Маршрутизация
️ip.src == 10.0.0.1 && ip.dst == 10.0.0.2 - трафик между двумя хостами.
👉 @i_odmin
Если нужно быстро найти нужный трафик в большом дампе — эти фильтры экономят кучу времени. Сохраняй себе и используй прямо в работе!
🧩 IP-фильтрация
️ip.addr == 10.0.0.0/24 - весь трафик внутри подсети.
️ip.addr == 10.0.0.1 - весь трафик к/от конкретного хоста.
️!(ip.addr == 10.0.0.1) - исключить трафик определённого хоста.
📡 Протоколы и типы пакетов
️icmp.type == 3 - ICMP “destination unreachable”.
️tcp or udp - показать только TCP/UDP.
️http or dns - весь HTTP или DNS трафик.
🔌 TCP-фильтры
️tcp.port == 80 - трафик по порту 80.
️tcp.srcport < 1000 - исходящие порты <1000.
️tcp.flags.syn == 1 - пакеты с SYN.
️tcp.flags == 0x012 - SYN+ACK.
️tcp.analysis.retransmission - ретрансмиссии.
🌐 HTTP-фильтры
️http.request.method == "GET" - HTTP GET.
️http.response.code == 404 - ответы 404.
️http.host == "www.abc.com" - фильтр по Host.
🔐 TLS
️tls.handshake — только рукопожатие TLS.
️tls.handshake.type == 1 - Client Hello.
🔎 DNS
️dns.resp.name == cnn.com - ответы DNS для домена.
🧱 Полезные универсальные фильтры
️frame contains keyword - поиск по содержимому.
️frame.len > 1000 - пакеты >1000 байт.
🟨 DHCP
️dhcp and ip.addr == 10.0.0.0/24 - DHCP внутри подсети.
️dhcp.hw.mac_addr == 00:11:22:33:44:55 - DHCP по MAC-адресу.
🔁 Маршрутизация
️ip.src == 10.0.0.1 && ip.dst == 10.0.0.2 - трафик между двумя хостами.
👉 @i_odmin
🥑 Apache Guacamole
Это шлюз для удалённого рабочего стола, не требующий установки клиентских приложений.
Он поддерживает стандартные протоколы, такие как VNC, RDP и SSH.
Он называется «клиентским-безклиентским» (clientless), потому что не требует никаких плагинов или клиентского ПО.
Благодаря HTML5, после установки Guacamole на сервер всё, что нужно для доступа к рабочим столам — это веб-браузер.
https://guacamole.apache.org/
источник
👉 @i_odmin
Это шлюз для удалённого рабочего стола, не требующий установки клиентских приложений.
Он поддерживает стандартные протоколы, такие как VNC, RDP и SSH.
Он называется «клиентским-безклиентским» (clientless), потому что не требует никаких плагинов или клиентского ПО.
Благодаря HTML5, после установки Guacamole на сервер всё, что нужно для доступа к рабочим столам — это веб-браузер.
https://guacamole.apache.org/
источник
👉 @i_odmin
RAID (Redundant Array of Independent Disks) — это технология, которая используется для повышения производительности и/или надежности хранения данных на дисках. Существует несколько типов RAID, каждый из которых имеет свои особенности:
1. RAID 0 (Striping)
- Особенности: Данные делятся на блоки и записываются на несколько дисков одновременно.
- Преимущества: Повышает скорость чтения и записи данных.
- Недостатки: Отсутствует защита данных. При отказе одного из дисков все данные теряются.
2. RAID 1 (Mirroring)
- Особенности: Все данные дублируются на двух или более дисках.
- Преимущества: Высокая надежность, поскольку данные сохраняются на нескольких дисках.
- Недостатки: Половина дискового пространства используется для зеркалирования, что снижает общую емкость.
3. RAID 5 (Striping with Parity)
- Особенности: Данные разделяются на блоки, а для каждого блока вычисляется контрольная сумма (паритет), которая записывается на один из дисков. Паритет распределяется по всем дискам.
- Преимущества: Позволяет восстановить данные при выходе из строя одного диска.
- Недостатки: Более сложная реализация и сниженная скорость записи по сравнению с RAID 0.
4. RAID 6 (Striping with Double Parity)
- Особенности: Аналог RAID 5, но используется двойной паритет для защиты данных.
- Преимущества: Выдерживает отказ двух дисков.
- Недостатки: Снижение производительности записи по сравнению с RAID 5.
5. RAID 10 (1+0, Mirrored Striping)
- Особенности: Комбинирует RAID 1 и RAID 0. Данные сначала зеркалируются (RAID 1), а затем разбиваются на блоки (RAID 0).
- Преимущества: Высокая производительность и высокая надежность.
- Недостатки: Требуется минимум четыре диска, и половина емкости используется для зеркалирования.
6. RAID 01 (0+1, Striping Mirrored)
- Особенности: Комбинирует RAID 0 и RAID 1, но сначала данные разбиваются на блоки (RAID 0), а затем зеркалируются (RAID 1).
- Преимущества: Высокая производительность и отказоустойчивость.
- Недостатки: Менее эффективен в использовании дисков, чем RAID 10.
7. RAID 50 (RAID 5+0)
- Особенности: Комбинирует RAID 5 и RAID 0. Данные распределяются по нескольким группам RAID 5, которые затем объединяются в RAID 0.
- Преимущества: Баланс между производительностью и отказоустойчивостью.
- Недостатки: Более сложная реализация и требуются большие ресурсы.
8. RAID 60 (RAID 6+0)
- Особенности: Комбинирует RAID 6 и RAID 0. Несколько массивов RAID 6 объединяются в один массив RAID 0.
- Преимущества: Увеличенная надежность за счет двойного паритета.
- Недостатки: Снижение производительности записи по сравнению с RAID 50.
9. RAID 2, 3, 4
- Особенности: Эти типы RAID используют разные подходы к управлению данными и паритетом, но встречаются реже.
- Преимущества и недостатки: Эти конфигурации имеют свои уникальные особенности, но не получили широкого распространения из-за ограниченных преимуществ перед более популярными RAID 5 и 6.
Каждый тип RAID подходит для разных целей: RAID 0 — для максимальной скорости, RAID 1 — для надежности, а RAID 5 и 6 — для баланса между отказоустойчивостью и эффективностью использования пространства.
👉 @i_odmin
1. RAID 0 (Striping)
- Особенности: Данные делятся на блоки и записываются на несколько дисков одновременно.
- Преимущества: Повышает скорость чтения и записи данных.
- Недостатки: Отсутствует защита данных. При отказе одного из дисков все данные теряются.
2. RAID 1 (Mirroring)
- Особенности: Все данные дублируются на двух или более дисках.
- Преимущества: Высокая надежность, поскольку данные сохраняются на нескольких дисках.
- Недостатки: Половина дискового пространства используется для зеркалирования, что снижает общую емкость.
3. RAID 5 (Striping with Parity)
- Особенности: Данные разделяются на блоки, а для каждого блока вычисляется контрольная сумма (паритет), которая записывается на один из дисков. Паритет распределяется по всем дискам.
- Преимущества: Позволяет восстановить данные при выходе из строя одного диска.
- Недостатки: Более сложная реализация и сниженная скорость записи по сравнению с RAID 0.
4. RAID 6 (Striping with Double Parity)
- Особенности: Аналог RAID 5, но используется двойной паритет для защиты данных.
- Преимущества: Выдерживает отказ двух дисков.
- Недостатки: Снижение производительности записи по сравнению с RAID 5.
5. RAID 10 (1+0, Mirrored Striping)
- Особенности: Комбинирует RAID 1 и RAID 0. Данные сначала зеркалируются (RAID 1), а затем разбиваются на блоки (RAID 0).
- Преимущества: Высокая производительность и высокая надежность.
- Недостатки: Требуется минимум четыре диска, и половина емкости используется для зеркалирования.
6. RAID 01 (0+1, Striping Mirrored)
- Особенности: Комбинирует RAID 0 и RAID 1, но сначала данные разбиваются на блоки (RAID 0), а затем зеркалируются (RAID 1).
- Преимущества: Высокая производительность и отказоустойчивость.
- Недостатки: Менее эффективен в использовании дисков, чем RAID 10.
7. RAID 50 (RAID 5+0)
- Особенности: Комбинирует RAID 5 и RAID 0. Данные распределяются по нескольким группам RAID 5, которые затем объединяются в RAID 0.
- Преимущества: Баланс между производительностью и отказоустойчивостью.
- Недостатки: Более сложная реализация и требуются большие ресурсы.
8. RAID 60 (RAID 6+0)
- Особенности: Комбинирует RAID 6 и RAID 0. Несколько массивов RAID 6 объединяются в один массив RAID 0.
- Преимущества: Увеличенная надежность за счет двойного паритета.
- Недостатки: Снижение производительности записи по сравнению с RAID 50.
9. RAID 2, 3, 4
- Особенности: Эти типы RAID используют разные подходы к управлению данными и паритетом, но встречаются реже.
- Преимущества и недостатки: Эти конфигурации имеют свои уникальные особенности, но не получили широкого распространения из-за ограниченных преимуществ перед более популярными RAID 5 и 6.
Каждый тип RAID подходит для разных целей: RAID 0 — для максимальной скорости, RAID 1 — для надежности, а RAID 5 и 6 — для баланса между отказоустойчивостью и эффективностью использования пространства.
👉 @i_odmin
Перенос VM с Hyper-V на Proxmox
Перенос виртуальной машины (VM) с Hyper-V на Proxmox включает несколько шагов, поскольку Hyper-V и Proxmox используют разные форматы виртуальных дисков. Hyper-V использует формат VHDX, а Proxmox предпочитает формат QCOW2 или RAW. Основная задача заключается в конвертации дисков и настройке виртуальной машины на новом гипервизоре.
Шаги для переноса VM с Hyper-V на Proxmox
📌1. Подготовка виртуальной машины в Hyper-V
1. Выключите виртуальную машину в Hyper-V.
Чтобы избежать проблем с консистентностью данных, убедитесь, что VM выключена перед экспортом.
2. Экспортируйте виртуальную машину.
Откройте Hyper-V Manager и выполните экспорт виртуальной машины:
- Выберите нужную виртуальную машину.
- Нажмите "Экспортировать" и выберите директорию для сохранения экспортированных файлов.
В результате экспорт сохранит всю конфигурацию виртуальной машины и файлы дисков (обычно в формате VHD или VHDX).
📌2. Конвертация виртуального диска
Proxmox поддерживает несколько форматов виртуальных дисков, таких как QCOW2 и RAW. Вы можете использовать утилиту qemu-img для конвертации формата.
1. Перенесите диск (VHDX/VHD) на сервер Proxmox.
Скопируйте файл виртуального диска с Hyper-V на сервер Proxmox с помощью SCP или другого метода передачи файлов.
Пример использования SCP:
scp /path/to/your/disk.vhdx user@proxmox:/var/lib/vz/images/
2. Установите `qemu-utils` (если он не установлен).
Для конвертации используйте утилиту qemu-img. На Proxmox по умолчанию установлена эта утилита, но если её нет, установите:
apt-get install qemu-utils
3. Конвертируйте VHDX в формат QCOW2 или RAW.
Выполните команду для конвертации:
- В QCOW2:
qemu-img convert -f vhdx -O qcow2 /path/to/your/disk.vhdx /var/lib/vz/images/VMID/vm-disk.qcow2
- В RAW:
qemu-img convert -f vhdx -O raw /path/to/your/disk.vhdx /var/lib/vz/images/VMID/vm-disk.raw
- /path/to/your/disk.vhdx — путь к вашему файлу VHDX.
- /var/lib/vz/images/VMID/vm-disk.qcow2 — путь, куда будет сохранен новый виртуальный диск, с указанием идентификатора VM (`VMID`).
📌3. Создание новой VM на Proxmox
1. Создайте новую виртуальную машину на Proxmox.
В интерфейсе Proxmox:
- Нажмите "Создать VM".
- Укажите настройки (например, процессоры, память, сетевые адаптеры), соответствующие параметрам вашей VM на Hyper-V.
- На этапе создания жесткого диска выберите небольшой размер временного диска (он не будет использоваться).
2. Подмените созданный диск на сконвертированный.
После создания VM:
- Перейдите в директорию, где хранится диск новой VM: /var/lib/vz/images/VMID/.
- Удалите временный диск и замените его на сконвертированный диск:
mv /path/to/vm-disk.qcow2 /var/lib/vz/images/VMID/
3. Проверьте и отредактируйте конфигурацию виртуальной машины.
Откройте файл конфигурации VM, который находится по пути /etc/pve/qemu-server/VMID.conf, и убедитесь, что строка с указанием диска ссылается на ваш новый файл:
scsi0: local:VMID/vm-disk.qcow2
📌4. Запуск виртуальной машины
1. Запустите виртуальную машину в Proxmox.
В интерфейсе Proxmox запустите VM и проверьте, корректно ли она работает.
2. Установите необходимые драйвера.
Если в Hyper-V VM использовала специфичные драйвера, возможно, потребуется установить новые драйвера в ОС, чтобы она корректно функционировала в Proxmox (например, драйвера для сетевого адаптера или виртуальных дисков).
Заключение
После выполнения этих шагов виртуальная машина должна корректно работать на платформе Proxmox. Если возникнут проблемы с драйверами или загрузкой системы, возможно, потребуется дополнительно настроить параметры виртуальной машины или обновить конфигурацию ОС.
👉 @i_odmin
Перенос виртуальной машины (VM) с Hyper-V на Proxmox включает несколько шагов, поскольку Hyper-V и Proxmox используют разные форматы виртуальных дисков. Hyper-V использует формат VHDX, а Proxmox предпочитает формат QCOW2 или RAW. Основная задача заключается в конвертации дисков и настройке виртуальной машины на новом гипервизоре.
Шаги для переноса VM с Hyper-V на Proxmox
📌1. Подготовка виртуальной машины в Hyper-V
1. Выключите виртуальную машину в Hyper-V.
Чтобы избежать проблем с консистентностью данных, убедитесь, что VM выключена перед экспортом.
2. Экспортируйте виртуальную машину.
Откройте Hyper-V Manager и выполните экспорт виртуальной машины:
- Выберите нужную виртуальную машину.
- Нажмите "Экспортировать" и выберите директорию для сохранения экспортированных файлов.
В результате экспорт сохранит всю конфигурацию виртуальной машины и файлы дисков (обычно в формате VHD или VHDX).
📌2. Конвертация виртуального диска
Proxmox поддерживает несколько форматов виртуальных дисков, таких как QCOW2 и RAW. Вы можете использовать утилиту qemu-img для конвертации формата.
1. Перенесите диск (VHDX/VHD) на сервер Proxmox.
Скопируйте файл виртуального диска с Hyper-V на сервер Proxmox с помощью SCP или другого метода передачи файлов.
Пример использования SCP:
scp /path/to/your/disk.vhdx user@proxmox:/var/lib/vz/images/
2. Установите `qemu-utils` (если он не установлен).
Для конвертации используйте утилиту qemu-img. На Proxmox по умолчанию установлена эта утилита, но если её нет, установите:
apt-get install qemu-utils
3. Конвертируйте VHDX в формат QCOW2 или RAW.
Выполните команду для конвертации:
- В QCOW2:
qemu-img convert -f vhdx -O qcow2 /path/to/your/disk.vhdx /var/lib/vz/images/VMID/vm-disk.qcow2
- В RAW:
qemu-img convert -f vhdx -O raw /path/to/your/disk.vhdx /var/lib/vz/images/VMID/vm-disk.raw
- /path/to/your/disk.vhdx — путь к вашему файлу VHDX.
- /var/lib/vz/images/VMID/vm-disk.qcow2 — путь, куда будет сохранен новый виртуальный диск, с указанием идентификатора VM (`VMID`).
📌3. Создание новой VM на Proxmox
1. Создайте новую виртуальную машину на Proxmox.
В интерфейсе Proxmox:
- Нажмите "Создать VM".
- Укажите настройки (например, процессоры, память, сетевые адаптеры), соответствующие параметрам вашей VM на Hyper-V.
- На этапе создания жесткого диска выберите небольшой размер временного диска (он не будет использоваться).
2. Подмените созданный диск на сконвертированный.
После создания VM:
- Перейдите в директорию, где хранится диск новой VM: /var/lib/vz/images/VMID/.
- Удалите временный диск и замените его на сконвертированный диск:
mv /path/to/vm-disk.qcow2 /var/lib/vz/images/VMID/
3. Проверьте и отредактируйте конфигурацию виртуальной машины.
Откройте файл конфигурации VM, который находится по пути /etc/pve/qemu-server/VMID.conf, и убедитесь, что строка с указанием диска ссылается на ваш новый файл:
scsi0: local:VMID/vm-disk.qcow2
📌4. Запуск виртуальной машины
1. Запустите виртуальную машину в Proxmox.
В интерфейсе Proxmox запустите VM и проверьте, корректно ли она работает.
2. Установите необходимые драйвера.
Если в Hyper-V VM использовала специфичные драйвера, возможно, потребуется установить новые драйвера в ОС, чтобы она корректно функционировала в Proxmox (например, драйвера для сетевого адаптера или виртуальных дисков).
Заключение
После выполнения этих шагов виртуальная машина должна корректно работать на платформе Proxmox. Если возникнут проблемы с драйверами или загрузкой системы, возможно, потребуется дополнительно настроить параметры виртуальной машины или обновить конфигурацию ОС.
👉 @i_odmin
Управление и настройка сети в Linux с помощью утилиты nmcli
Вы можете использовать различные инструменты для настройки сетевых подключений, как графических так и консольно командных, графические удобны своей простотой, а командные удобны тем что их можно использовать в различных сценариях, в этом видео вы познакомитесь с консольной утилитой nmcli (Network Manager Command Line Interface)
Настройка интерфейса
con — сокращенно от connection (можно писать сокращенно или полностью)
mod — сокращенно от modify (можно писать сокращенно или полностью)
dev — сокращенно от device (можно писать сокращенно или полностью)
ens33 — имя интерфейса
ipv4.addresses — семейство протокола ipv4
Переименовать имя соединения:
nmcli con mod "Wired connection 1" con-name "lan"
Установка адреса в ручном режиме:
nmcli con mod ens33 ipv4.method manual
Получить IP адрес автоматически через DHCP:
nmcli con mod ens33 ipv4.method auto
Установить IP адрес:
nmcli con mod ens33 ipv4.addresses 192.168.100.25/24
Удалить IP адрес:
nmcli con mod ens33 ipv4.addresses ""
Установить шлюз по умолчанию:
nmcli con mod ens33 ipv4.gateway 20.20.20.1
Удалить шлюз по умолчанию:
nmcli con mod ens33 ipv4.gateway ""
Установить DNS:
nmcli con mod ens33 ipv4.dns 8.8.8.8
Удалить DNS адрес:
nmcli con mod ens33 ipv4.dns ""
Включить интерфейс:
nmcli con up ens33
Выключить интерфейс:
nmcli con down ens33
Добавить дополнительный IP адрес:
nmcli con mod ens33 +ipv4.addresses "192.168.180.189/24"
Удалить IP адрес (второй вариант):
nmcli con mod ens33 -ipv4.addresses "192.168.8.189/24"
Добавить VLAN c тегом 21 на физический интерфейс ens33 (InterVLAN):
nmcli con add type vlan con-name VLAN21 ifname VLAN21 dev ens33 id 21
Установить IP адрес VLAN интерфейсу:
nmcli con mod VLAN21 ipv4.addresses 172.10.10.11/24
Команды диагностики
Cостояние всех интерфейсов:
nmcli dev status
Краткое состоянии всех интерфейсов:
nmcli -t dev
Cостояние физических интерфейсов и их UUID:
nmcli con show
Информация о конкретном интерфейсе:
nmcli dev show ens33
Информация о соединении интерфейса:
nmcli con show ens33
Маршрутизация
Посмотреть таблицу маршрутизации:
ip route
Добавить временный маршрут на сеть 192.168.2.0/24 через 192.168.100.1:
ip route add 192.168.2.0/24 via 192.168.100.1
Изменить временный маршрут:
ip route change 192.168.2.0/24 via 192.168.8.10
Добавить второй временный шлюз для сети 192.168.2.0/24 (балансировка маршрута):
ip route append 192.168.2.0/24 via 192.168.8.11
Удалить временный маршрут на сеть 192.168.2.0/24 через 192.168.8.12:
ip route del 192.168.2.0/24 via 192.168.8.11
Удалить временный маршрут на сеть 192.168.2.0/24 :
ip route del 192.168.2.0/24
Добавить постоянный маршрут на сеть 192.168.2.0/24 через 192.168.8.2 на интерфейсе ens33:
nmcli con mod ens33 +ipv4.routes "192.168.2.0/24 192.168.8.54"
nmcli con up ens33
Удалить маршрут на сеть 192.168.2.0/24 через 192.168.8.2 на интерфейсе ens33:
nmcli con mod ens33 -ipv4.routes "192.168.2.0/24 192.168.8.54"
nmcli con up ens33
Изменить метрику на интерфейсе:
nmcli con mod ens33 ipv4.route-metric 400
nmcli con up ens33
Изменить mtu на интерфейсе:
nmcli con mod ens33 ethernet.mtu 1600
nmcli con up ens33
источник
👉 @i_odmin
Вы можете использовать различные инструменты для настройки сетевых подключений, как графических так и консольно командных, графические удобны своей простотой, а командные удобны тем что их можно использовать в различных сценариях, в этом видео вы познакомитесь с консольной утилитой nmcli (Network Manager Command Line Interface)
Настройка интерфейса
con — сокращенно от connection (можно писать сокращенно или полностью)
mod — сокращенно от modify (можно писать сокращенно или полностью)
dev — сокращенно от device (можно писать сокращенно или полностью)
ens33 — имя интерфейса
ipv4.addresses — семейство протокола ipv4
Переименовать имя соединения:
nmcli con mod "Wired connection 1" con-name "lan"
Установка адреса в ручном режиме:
nmcli con mod ens33 ipv4.method manual
Получить IP адрес автоматически через DHCP:
nmcli con mod ens33 ipv4.method auto
Установить IP адрес:
nmcli con mod ens33 ipv4.addresses 192.168.100.25/24
Удалить IP адрес:
nmcli con mod ens33 ipv4.addresses ""
Установить шлюз по умолчанию:
nmcli con mod ens33 ipv4.gateway 20.20.20.1
Удалить шлюз по умолчанию:
nmcli con mod ens33 ipv4.gateway ""
Установить DNS:
nmcli con mod ens33 ipv4.dns 8.8.8.8
Удалить DNS адрес:
nmcli con mod ens33 ipv4.dns ""
Включить интерфейс:
nmcli con up ens33
Выключить интерфейс:
nmcli con down ens33
Добавить дополнительный IP адрес:
nmcli con mod ens33 +ipv4.addresses "192.168.180.189/24"
Удалить IP адрес (второй вариант):
nmcli con mod ens33 -ipv4.addresses "192.168.8.189/24"
Добавить VLAN c тегом 21 на физический интерфейс ens33 (InterVLAN):
nmcli con add type vlan con-name VLAN21 ifname VLAN21 dev ens33 id 21
Установить IP адрес VLAN интерфейсу:
nmcli con mod VLAN21 ipv4.addresses 172.10.10.11/24
Команды диагностики
Cостояние всех интерфейсов:
nmcli dev status
Краткое состоянии всех интерфейсов:
nmcli -t dev
Cостояние физических интерфейсов и их UUID:
nmcli con show
Информация о конкретном интерфейсе:
nmcli dev show ens33
Информация о соединении интерфейса:
nmcli con show ens33
Маршрутизация
Посмотреть таблицу маршрутизации:
ip route
Добавить временный маршрут на сеть 192.168.2.0/24 через 192.168.100.1:
ip route add 192.168.2.0/24 via 192.168.100.1
Изменить временный маршрут:
ip route change 192.168.2.0/24 via 192.168.8.10
Добавить второй временный шлюз для сети 192.168.2.0/24 (балансировка маршрута):
ip route append 192.168.2.0/24 via 192.168.8.11
Удалить временный маршрут на сеть 192.168.2.0/24 через 192.168.8.12:
ip route del 192.168.2.0/24 via 192.168.8.11
Удалить временный маршрут на сеть 192.168.2.0/24 :
ip route del 192.168.2.0/24
Добавить постоянный маршрут на сеть 192.168.2.0/24 через 192.168.8.2 на интерфейсе ens33:
nmcli con mod ens33 +ipv4.routes "192.168.2.0/24 192.168.8.54"
nmcli con up ens33
Удалить маршрут на сеть 192.168.2.0/24 через 192.168.8.2 на интерфейсе ens33:
nmcli con mod ens33 -ipv4.routes "192.168.2.0/24 192.168.8.54"
nmcli con up ens33
Изменить метрику на интерфейсе:
nmcli con mod ens33 ipv4.route-metric 400
nmcli con up ens33
Изменить mtu на интерфейсе:
nmcli con mod ens33 ethernet.mtu 1600
nmcli con up ens33
источник
👉 @i_odmin
OpenSSH: Разбираем туннели
Мы с примерами разбираем прямые туннели, обратные и создаем SOCKS туннели для проксирования веб траффика.
источник
👉 @i_odmin
Мы с примерами разбираем прямые туннели, обратные и создаем SOCKS туннели для проксирования веб траффика.
источник
👉 @i_odmin
Список полезных команд для работы с telnet, которые могут помочь при подключении и отладке сетевых служб:
Основные команды telnet:
1. Подключение к удаленному хосту:
telnet <hostname> <port>
Пример:
telnet example.com 80
Подключается к хосту example.com на порту 80 (HTTP).
2. Закрытие соединения:
Чтобы завершить сессию, используйте сочетание клавиш:
Ctrl + ] (переход в режим команд)
Затем введите:
quit
3. Отправка текстового запроса после подключения:
Если подключились к порту, например, HTTP-сервера, можно отправить запрос вручную:
GET / HTTP/1.1
Host: example.com
Это выполняет запрос к домашней странице на порту 80.
Встроенные команды telnet (используйте в режиме команд после нажатия Ctrl + ]):
1. help
Показывает список доступных команд telnet:
telnet> help
2. open
Открывает новое соединение с указанным хостом:
telnet> open <hostname> <port>
3. close
Закрывает текущее соединение:
telnet> close
4. display
Показывает текущие параметры подключения:
telnet> display
5. mode
Переключает режим работы telnet (например, line или character):
telnet> mode line
6. send
Отправляет управляющие символы (например, send escape для отправки escape-секвенции):
telnet> send escape
7. status
Показывает статус текущего соединения:
telnet> status
8. set и unset
Настраивают параметры подключения (например, установка режима эхо):
telnet> set echo
telnet> unset echo
Примеры использования telnet:
1. Проверка доступности порта:
Чтобы проверить, открыт ли порт на удаленном сервере:
telnet <hostname> <port>
2. Проверка почтового сервера (SMTP):
Подключение к серверу SMTP:
telnet smtp.example.com 25
Затем можно вручную ввести SMTP-команды, такие как:
EHLO example.com
3. Проверка DNS сервера:
Можно подключиться к DNS-серверу и проверить его ответы:
telnet <dns-server> 53
Эти команды помогут вам для отладки, диагностики и проверки сетевых служб.
👉 @i_odmin
Основные команды telnet:
1. Подключение к удаленному хосту:
telnet <hostname> <port>
Пример:
telnet example.com 80
Подключается к хосту example.com на порту 80 (HTTP).
2. Закрытие соединения:
Чтобы завершить сессию, используйте сочетание клавиш:
Ctrl + ] (переход в режим команд)
Затем введите:
quit
3. Отправка текстового запроса после подключения:
Если подключились к порту, например, HTTP-сервера, можно отправить запрос вручную:
GET / HTTP/1.1
Host: example.com
Это выполняет запрос к домашней странице на порту 80.
Встроенные команды telnet (используйте в режиме команд после нажатия Ctrl + ]):
1. help
Показывает список доступных команд telnet:
telnet> help
2. open
Открывает новое соединение с указанным хостом:
telnet> open <hostname> <port>
3. close
Закрывает текущее соединение:
telnet> close
4. display
Показывает текущие параметры подключения:
telnet> display
5. mode
Переключает режим работы telnet (например, line или character):
telnet> mode line
6. send
Отправляет управляющие символы (например, send escape для отправки escape-секвенции):
telnet> send escape
7. status
Показывает статус текущего соединения:
telnet> status
8. set и unset
Настраивают параметры подключения (например, установка режима эхо):
telnet> set echo
telnet> unset echo
Примеры использования telnet:
1. Проверка доступности порта:
Чтобы проверить, открыт ли порт на удаленном сервере:
telnet <hostname> <port>
2. Проверка почтового сервера (SMTP):
Подключение к серверу SMTP:
telnet smtp.example.com 25
Затем можно вручную ввести SMTP-команды, такие как:
EHLO example.com
3. Проверка DNS сервера:
Можно подключиться к DNS-серверу и проверить его ответы:
telnet <dns-server> 53
Эти команды помогут вам для отладки, диагностики и проверки сетевых служб.
👉 @i_odmin
Полезные команды Linux. Архивация и сжатие файлов
# gzip -9 file1
Поместить файл file1 в архив gzip с максимальной степенью сжатия
# rar a file1.rar file1 file2 dir1
Создать rar архив file1.rar, заархивировав файлы: file1, file2 и директорию: dir1
# rar a file1.rar test_file
Упаковать в rar архив file1.rar файл test_file
# rar x file.rar
Разархивировать rar архив file.rar
# bzip2 file1
Сжимает файл file1
# bunzip2 file1.bz2
Разжимает файл file1.bz2
# gzip file1
Сжимает файл file1
# gunzip file1.gz
Разжимает файл file1.gz
# tar -cvf archive.tar file1 file2 dir1
Создать tar архив archive.tar, упаковав в него файлы file1, file2 и директорию dir1
# tar -cvf archive.tar file
Упаковать в tar-архив archive.tar, файл file
# tar -tf archive.tar
Вывести содержимое tar архива
# tar -xvf archive.tar
Распаковать tar архив
# tar -xvf archive.tar -C /tmp
Распаковать архив в /tmp
# tar -cvfz archive.tar.gz dir1
Создать tar архив и сжать его с помощью программы gzip
# tar -xvfz archive.tar.gz
Разжать tar архив и распаковать его
# tar -cvfj archive.tar.bz2 dir1
Создать архив и сжать его с помощью bzip2 ( ключ -j работает не во всех *nix системах )
# tar -xvfj archive.tar.bz2
Разжать архив и распаковать его ( ключ -j работает не во всех *nix системах )
# zip file1.zip file1
Создать сжатый zip-архив
# zip -r file1.zip file1 file2 dir1
Запаковать в архив несколько файлов и/или директорий
# unzip file1.zip
Разжать и распаковать zip-архив
# unrar x file1.rar
Распаковать rar-архив
👉 @i_odmin
# gzip -9 file1
Поместить файл file1 в архив gzip с максимальной степенью сжатия
# rar a file1.rar file1 file2 dir1
Создать rar архив file1.rar, заархивировав файлы: file1, file2 и директорию: dir1
# rar a file1.rar test_file
Упаковать в rar архив file1.rar файл test_file
# rar x file.rar
Разархивировать rar архив file.rar
# bzip2 file1
Сжимает файл file1
# bunzip2 file1.bz2
Разжимает файл file1.bz2
# gzip file1
Сжимает файл file1
# gunzip file1.gz
Разжимает файл file1.gz
# tar -cvf archive.tar file1 file2 dir1
Создать tar архив archive.tar, упаковав в него файлы file1, file2 и директорию dir1
# tar -cvf archive.tar file
Упаковать в tar-архив archive.tar, файл file
# tar -tf archive.tar
Вывести содержимое tar архива
# tar -xvf archive.tar
Распаковать tar архив
# tar -xvf archive.tar -C /tmp
Распаковать архив в /tmp
# tar -cvfz archive.tar.gz dir1
Создать tar архив и сжать его с помощью программы gzip
# tar -xvfz archive.tar.gz
Разжать tar архив и распаковать его
# tar -cvfj archive.tar.bz2 dir1
Создать архив и сжать его с помощью bzip2 ( ключ -j работает не во всех *nix системах )
# tar -xvfj archive.tar.bz2
Разжать архив и распаковать его ( ключ -j работает не во всех *nix системах )
# zip file1.zip file1
Создать сжатый zip-архив
# zip -r file1.zip file1 file2 dir1
Запаковать в архив несколько файлов и/или директорий
# unzip file1.zip
Разжать и распаковать zip-архив
# unrar x file1.rar
Распаковать rar-архив
👉 @i_odmin
Terminus (Tabby) – Кросс-платформенный терминал с возможностью тонкой конфигурации.
Данный терминал имеет интегрированный ssh-клиент - что делает его превосходной заменой стандартного PowerShell или PuTTY на Windows.
https://github.com/Eugeny/tabby
👉 @i_odmin
Данный терминал имеет интегрированный ssh-клиент - что делает его превосходной заменой стандартного PowerShell или PuTTY на Windows.
https://github.com/Eugeny/tabby
👉 @i_odmin
Ты хочешь гарантированно ворваться в IT и начать зарабатывать? В России сегодня один из самых надежных путей в профессию - это 1С-разработка. Этот рынок растет каждый год, а 1С используют почти все компании в стране и специалистов действительно не хватает.
В Kata Academy ты пройдешь путь с нуля до трудоустройства всего за 9 месяцев.
1С это возможность работать в любой сфере бизнеса: от торговли до производства и выбирать удобный формат занятости. Карьера может развиваться в разработке, внедрении, консалтинге или управлении проектами.
Ты получаешь не просто знания, а востребованную профессию и уверенность в завтрашнем дне.
Начни путь в IT с профессии, которая уже востребована и спрос на специалистов продолжит расти. Если хочешь стабильность и хороший доход, пора изучать 1С вместе с Kata Academy.
#реклама
О рекламодателе
В Kata Academy ты пройдешь путь с нуля до трудоустройства всего за 9 месяцев.
1С это возможность работать в любой сфере бизнеса: от торговли до производства и выбирать удобный формат занятости. Карьера может развиваться в разработке, внедрении, консалтинге или управлении проектами.
Ты получаешь не просто знания, а востребованную профессию и уверенность в завтрашнем дне.
Начни путь в IT с профессии, которая уже востребована и спрос на специалистов продолжит расти. Если хочешь стабильность и хороший доход, пора изучать 1С вместе с Kata Academy.
#реклама
О рекламодателе
Сложно о простом. Все, что бы вы хотели знать о SFP модулях. Часть 2. Оптические кабели
В данной статье хотел бы с вами обсудить все, что касается оптических кабелей. От основ их устройства до практических рекомендаций по выбору.
❯ Зачем нужна эта статья?
Данная статья нам нужна для того, чтобы разобраться в базовых понятиях и разобрать:
- что такое оптическое волокно, патч-корд, пигтейл и из чего они состоят;
- симплекс и дуплекс;
- типы волокон (классы и стандарты);
- коннекторы и розетки;
- IL и RL;
- виды оболочек кабеля;
- как выбрать оптический патч-корд с практическими примерами.
https://habr.com/ru/companies/timeweb/articles/956574/
👉 @i_odmin
В данной статье хотел бы с вами обсудить все, что касается оптических кабелей. От основ их устройства до практических рекомендаций по выбору.
❯ Зачем нужна эта статья?
Данная статья нам нужна для того, чтобы разобраться в базовых понятиях и разобрать:
- что такое оптическое волокно, патч-корд, пигтейл и из чего они состоят;
- симплекс и дуплекс;
- типы волокон (классы и стандарты);
- коннекторы и розетки;
- IL и RL;
- виды оболочек кабеля;
- как выбрать оптический патч-корд с практическими примерами.
https://habr.com/ru/companies/timeweb/articles/956574/
👉 @i_odmin
Сложно о простом. Все, что бы вы хотели знать о SFP модулях. Часть 1. Эволюция модулей и базовые понятия
Я начинаю новый цикл статей. В нем мне бы хотелось с вами обсудить SFP‑модули. Что это такое, какие типы бывают (и чем они отличаются), какую роль играют оптические кабели и немного затронем историю их развития.
Информации очень много. Точного объема статей я пока не знаю, но обещаю разложить все по полочкам максимально емко и понятно.
https://habr.com/ru/companies/timeweb/articles/938234/
👉 @i_odmin
Я начинаю новый цикл статей. В нем мне бы хотелось с вами обсудить SFP‑модули. Что это такое, какие типы бывают (и чем они отличаются), какую роль играют оптические кабели и немного затронем историю их развития.
Информации очень много. Точного объема статей я пока не знаю, но обещаю разложить все по полочкам максимально емко и понятно.
https://habr.com/ru/companies/timeweb/articles/938234/
👉 @i_odmin
Piu-piu-SH
Игра написана на чистом bash. Она поддерживает многопользовательские режимы «команда» и «дуэль». Для обмена данными между клиентом и сервером в многопользовательском режиме используется Netcat, поэтому он должен быть установлен в системе, если вы хотите играть с другом. Терминалы на обоих хостах должны быть одинакового размера для лучшего визуального восприятия.
В Ubuntu, начиная с версии 18.04, вы можете установить её через apt, но это не последняя версия.
sudo apt install -y piu-piu
https://github.com/vaniacer/piu-piu-SH
👉 @i_odmin
Игра написана на чистом bash. Она поддерживает многопользовательские режимы «команда» и «дуэль». Для обмена данными между клиентом и сервером в многопользовательском режиме используется Netcat, поэтому он должен быть установлен в системе, если вы хотите играть с другом. Терминалы на обоих хостах должны быть одинакового размера для лучшего визуального восприятия.
В Ubuntu, начиная с версии 18.04, вы можете установить её через apt, но это не последняя версия.
sudo apt install -y piu-piu
https://github.com/vaniacer/piu-piu-SH
👉 @i_odmin
Запуск команд на удаленном сервере через SSH
Запуск команд на удаленном компьютере через SSH-подключение
Протокол SSH, помимо работы в интерактивном режиме, поддерживает также разовый запуск команд или скриптов на удаленном компьютере под управлением ОС семейства Linux.
Синтаксис команды запуска удаленной команды:
ssh [пользователь]@[сервер] '[команда]'
Если доступ по ssh реализован по ключевой паре, то команда выполнится немедленно. Если нет, то при запросе вводим пароль указанного пользователя и в консоли получаем вывод команды, если таковой имеется.
Например, получим информацию об установленной на удаленном сервере операционной системе:
ssh my_name@192.168.1.77 'uname -a'
Чтобы запустить несколько команд за одно подключение, можно использовать символ “;” в качестве разделителя. Проверим время работы удаленного компьютера, его загрузку и запросим все активные сетевые подключения на удаленном компьютере:
ssh my_name@192.168.1.77 'uptime; netstat -anp tcp'
В случае, если потребуется запустить на удаленном сервере локальный файл скрипта, то потребуется в SSH-подключении вызвать командный интерпретатор в режиме исполнения сценария (например, bash с ключом -s), и на стандартный ввод передать ему файл скрипта. Команда запуска локального скрипта на удаленном компьютере будет выглядеть примерно так:
ssh my_name@192.168.1.77 'bash -s' < /home/user/anycript.sh
В результате скрипт в локальном файл /home/user/anyscript.sh исполнится на удаленном сервере.
👉 @i_odmin
Запуск команд на удаленном компьютере через SSH-подключение
Протокол SSH, помимо работы в интерактивном режиме, поддерживает также разовый запуск команд или скриптов на удаленном компьютере под управлением ОС семейства Linux.
Синтаксис команды запуска удаленной команды:
ssh [пользователь]@[сервер] '[команда]'
Если доступ по ssh реализован по ключевой паре, то команда выполнится немедленно. Если нет, то при запросе вводим пароль указанного пользователя и в консоли получаем вывод команды, если таковой имеется.
Например, получим информацию об установленной на удаленном сервере операционной системе:
ssh my_name@192.168.1.77 'uname -a'
Чтобы запустить несколько команд за одно подключение, можно использовать символ “;” в качестве разделителя. Проверим время работы удаленного компьютера, его загрузку и запросим все активные сетевые подключения на удаленном компьютере:
ssh my_name@192.168.1.77 'uptime; netstat -anp tcp'
В случае, если потребуется запустить на удаленном сервере локальный файл скрипта, то потребуется в SSH-подключении вызвать командный интерпретатор в режиме исполнения сценария (например, bash с ключом -s), и на стандартный ввод передать ему файл скрипта. Команда запуска локального скрипта на удаленном компьютере будет выглядеть примерно так:
ssh my_name@192.168.1.77 'bash -s' < /home/user/anycript.sh
В результате скрипт в локальном файл /home/user/anyscript.sh исполнится на удаленном сервере.
👉 @i_odmin
🔐 Как работает HTTPS и почему это безопасно?
Когда вы видите в адресной строке значок 🔒 - это означает, что соединение с сайтом защищено. Но как именно данные защищаются?
1) Проверка сертификата сервера
Браузер соединяется с сервером и получает SSL-сертификат.
Он проверяет, выдан ли сертификат доверенным центром (CA).
Если всё ок ✅ - продолжаем.
2) Обмен ключами
После проверки браузер и сервер договариваются, каким способом будут шифровать данные.
Создаётся общий секретный ключ - session key.
Этот ключ знают только они.
3) Шифрованный туннель
Теперь весь обмен данными происходит в зашифрованном виде.
Если кто-то перехватит трафик - он увидит лишь набор бессмысленных символов.
Почему это важно?
HTTPS защищает:
* 🔸 Пароли
* 🔸 Личные данные
* 🔸 Платёжную информацию
* 🔸 Сообщения и формы
👉 @i_odmin
Когда вы видите в адресной строке значок 🔒 - это означает, что соединение с сайтом защищено. Но как именно данные защищаются?
1) Проверка сертификата сервера
Браузер соединяется с сервером и получает SSL-сертификат.
Он проверяет, выдан ли сертификат доверенным центром (CA).
Если всё ок ✅ - продолжаем.
2) Обмен ключами
После проверки браузер и сервер договариваются, каким способом будут шифровать данные.
Создаётся общий секретный ключ - session key.
Этот ключ знают только они.
3) Шифрованный туннель
Теперь весь обмен данными происходит в зашифрованном виде.
Если кто-то перехватит трафик - он увидит лишь набор бессмысленных символов.
Почему это важно?
HTTPS защищает:
* 🔸 Пароли
* 🔸 Личные данные
* 🔸 Платёжную информацию
* 🔸 Сообщения и формы
👉 @i_odmin
Cамые нужные команд SSH
Запускай команды быстро
Чтобы выполнить всего одну удаленную команду, совсем не обязательно подключаться к SSH, вводить команду, а затем отключаться. Можно сделать это сразу. Например, так можно посмотреть заполненность ФС удаленной машины:
$ ssh user@host df -h
А так — перезагрузить ее:
$ ssh user@host sudo reboot
Составляй списки команд и запускай их разом
Если у тебя есть целый список команд, которые следует выполнить, их можно записать в файл и скормить этот файл SSH:
$ ssh user@host "`cat file.txt`"
Редактируй удаленные файлы локальным редактором
Чтобы отредактировать файл на удаленной машине, не требуется заходить на нее и использовать консольный редактор. На самом деле файл можно открыть в твоем любимом текстовом редакторе на локальной машине (gvim заменяем на свой редактор):
$ gvim scp://user@host//путь/к/файлу
Копируй содержимое удаленного файла в буфер обмена
Если необходимо скопировать содержимое удаленного файла или вывод команды в буфер обмена, не обязательно выводить его на экран или открывать в текстовом редакторе и копировать вручную. Можно использовать следующую команду:
$ ssh user@host cat /путь/к/файлу | xclip
А так можно скопировать вывод команды:
$ ssh user@host uname -a | xclip
Сравнивай удаленный и локальный файл без копирования
Похожий прием можно использовать для сравнения двух файлов:
$ ssh user@host cat /путь/к/удаленному/файлу | diff /путь/к/лoкальному/файлу -
Работай с удаленными файлами с помощью локального файлового менеджера
Не всегда удобно работать с большим количеством файлов с помощью консольных команд или mc, запущенного на удаленной машине. Но всегда можно подключить любой каталог удаленной машины как сетевой диск. Для этого достаточно установить sshfs:
$ sudo apt-get install sshfs
Создать каталог для подключения «сетевого диска»:
$ mkdir remote_files
И подключить его:
$ sshfs user@host:/home/user ~/remote_files/
Теперь все файлы удаленного каталога /home/user будут видны в каталоге ~/remote_files/ и с ними можно работать, как с обычными.
Копируй ключи быстро
Хоть и копирование публичного ключа на удаленный сервер — задача простая, но она требует выполнения нескольких действий вручную. Если тебя это напpягает, скопировать ключ можно в автоматическом режиме:
$ ssh-copy-id user@host
При этом не обязательно копировать основной ключ, с помощью флага -i можно указать любой другой:
$ ssh-copy-id -i ~/my_key.pub user@host
Создай постоянное соединение с машиной
Если в течение дня ты часто подключаешься к одной машине, в том числе на несколько минут или секунд (чтобы просто запустить одну команду, например), есть смысл создать с ней постоянное соединение. Твой комп будет держать соединение открытым и использовать его для каждого подключения к машине. Это намного быстрее и экономичнее с точки зрения трафика и нагрузки на процессор.
Добавь следующие строки в ~/.ssh/config:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no
А затем создай соединение:
$ ssh -MNf user@host
👉 @i_odmin
Запускай команды быстро
Чтобы выполнить всего одну удаленную команду, совсем не обязательно подключаться к SSH, вводить команду, а затем отключаться. Можно сделать это сразу. Например, так можно посмотреть заполненность ФС удаленной машины:
$ ssh user@host df -h
А так — перезагрузить ее:
$ ssh user@host sudo reboot
Составляй списки команд и запускай их разом
Если у тебя есть целый список команд, которые следует выполнить, их можно записать в файл и скормить этот файл SSH:
$ ssh user@host "`cat file.txt`"
Редактируй удаленные файлы локальным редактором
Чтобы отредактировать файл на удаленной машине, не требуется заходить на нее и использовать консольный редактор. На самом деле файл можно открыть в твоем любимом текстовом редакторе на локальной машине (gvim заменяем на свой редактор):
$ gvim scp://user@host//путь/к/файлу
Копируй содержимое удаленного файла в буфер обмена
Если необходимо скопировать содержимое удаленного файла или вывод команды в буфер обмена, не обязательно выводить его на экран или открывать в текстовом редакторе и копировать вручную. Можно использовать следующую команду:
$ ssh user@host cat /путь/к/файлу | xclip
А так можно скопировать вывод команды:
$ ssh user@host uname -a | xclip
Сравнивай удаленный и локальный файл без копирования
Похожий прием можно использовать для сравнения двух файлов:
$ ssh user@host cat /путь/к/удаленному/файлу | diff /путь/к/лoкальному/файлу -
Работай с удаленными файлами с помощью локального файлового менеджера
Не всегда удобно работать с большим количеством файлов с помощью консольных команд или mc, запущенного на удаленной машине. Но всегда можно подключить любой каталог удаленной машины как сетевой диск. Для этого достаточно установить sshfs:
$ sudo apt-get install sshfs
Создать каталог для подключения «сетевого диска»:
$ mkdir remote_files
И подключить его:
$ sshfs user@host:/home/user ~/remote_files/
Теперь все файлы удаленного каталога /home/user будут видны в каталоге ~/remote_files/ и с ними можно работать, как с обычными.
Копируй ключи быстро
Хоть и копирование публичного ключа на удаленный сервер — задача простая, но она требует выполнения нескольких действий вручную. Если тебя это напpягает, скопировать ключ можно в автоматическом режиме:
$ ssh-copy-id user@host
При этом не обязательно копировать основной ключ, с помощью флага -i можно указать любой другой:
$ ssh-copy-id -i ~/my_key.pub user@host
Создай постоянное соединение с машиной
Если в течение дня ты часто подключаешься к одной машине, в том числе на несколько минут или секунд (чтобы просто запустить одну команду, например), есть смысл создать с ней постоянное соединение. Твой комп будет держать соединение открытым и использовать его для каждого подключения к машине. Это намного быстрее и экономичнее с точки зрения трафика и нагрузки на процессор.
Добавь следующие строки в ~/.ssh/config:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no
А затем создай соединение:
$ ssh -MNf user@host
👉 @i_odmin