Читать в телеге. Когда-то там были посты не только от меня.
Тюнинг elasticsearch
Управление доступом по ssh
Есть несколько способов для этого:
-
Парольный доступ. Пожалуйста, не пользуйтесь им. Вроде как это звучит очень просто, но сервак становится уязвимым к перебору паролей, пароли надо где-то хранить, общие учетки растекаются по куче людей и вообще неизвестно куда, записываются на бумажки и т.п. Вдобавок с парольным доступом есть ограничения на многие действия — тяжело что-то автоматизировать, когда надо пароль пробрасывать. Есть
sshpass
, но его стоит использовать только в очень крайних случаях. -
Ключевой доступ. По умолчанию используйте его. Он надежнее, позволяет более гранулировано управлять доступом и использовать ssh практически бесшовно. Есть и проблемы: например, не очень просто удалить ключ уволившегося сотрудника из всех мест или ограничить права уже внутри хоста. Но это решается, например, через системы конфигурации типа Puppet или Ansible.
-
Доступ через SSO. С этим вариантом я столкнулся на новой работе. Суть заключается в том, что никто не дает доступа к серверам напрямую — только через промежуточный агент, который управляет доступом. Банальный вариант — вы запрашиваете доступ к определенному серверу, а после одобрения подключаетесь к серверу-агенту, вводите свои LDAP-данные и работаете дальше. Пример из интернета. Этот подход хорош для большой организации — контролируемый менеджмент ключей, возможность аудита, ведения журналов доступа и т.п. Но для рядового сотрудника это не очень удобно — возникают многие проблемы парольного доступа. Например, уже не скачаешь нормально файл по scp через промежуточный узел или не пробросишь чужие порты.
Compose key
Надеюсь, что ни для кого не секрет, что для текста лучше использовать длинное тире ‘—’, а не знак минуса ‘-’. Но проблема в том, как его вводить.
Конечно, есть автозамены, когда вам пробел-минус-пробел меняют на пробел-тире-пробел. Иногда это работает неплохо, но, во-первых, это есть не везде, а во-вторых — когда эта автозамена сработает неправильно, то сильно бесит. Горячие клавиши на символы тоже есть не везде.
Один из вариантов решения этой проблемы — Compose-клавиша, которая говорит о том, что несколько следующих символов надо преобразовать в один. В Linux назначить эту клавишу можно в настройках клавиатуры (я навесил на правый Win). Теперь я могу вводить тире как Win + - + - + -, а Æ из имени сына Илона Маска как Win + A + E. И работает это в любом приложении. Стандартные комбинации можно посмотреть, например, здесь.
В винде для этого надо нажать Alt и ввести на numpad код символа в ASCII или в Unicode. Помните лайфхаки из 2000-х, как в аське сердечки слать, еще до того как появились эмодзи? Вот это оно и есть. Но как запомнить код для тире — я не представляю. А в маках это тоже вроде как можно сделать, но инструкции удручают своей длиной. См. например, эту.
Сама по себе фича мне очень нравится. Все тире в последних моих текстах я набирал только так:)
Как мне подсказал @n_kudryavtsev, в Windows 10 уже примерно года два есть “панель эмодзи”, которую можно вызвать, находясь в любом текстовом поле, комбинацией Win + .. Там в одном из разделов есть и длинное тире.
Канал о безопасности сильного ИИ
Кому интересна тема ИИ и машиного обучения — рекомендую посмотреть канал Robert Miles. Он рассказывает простым языком о текущих проблемах, с которыми сталкиваются исследователи ИИ и сильного ИИ. Основные темы: почему сложно сделать роботов, которые не поубивают всех человеков, проблема адекватных вознаграждений, проблема человеческих ценностей. Иногда есть философские вставки, но на мой взгляд они все к месту.
Лайтовое видео, с которого начинал я:
Монтирование файловой системы через ssh
Если часто приходится копировать файлы туда-сюда на серваки или хочется использовать графические приложения для редактирования чего-либо, то можно подключить удаленную директорию локально с помощью sshfs
:
sshfs user@remotehost:/remotedir localdir
А дальше с ней работать как обычно — большинство программ не заметит разницы.
Поиск источника SQL-запроса
Слоями абстракций сейчас никого не удивишь и иногда 90% километрового стректрейса — кишки фреймворка. Отлаживать в таких условиях что-то довольно муторно. Кроме того, фреймворк может скрывать детали реализации.
Если ради оптимизации надо найти, где в большом приложении выполняется конкретный SQL-запрос, особенно с учетом всяких ORM и entity-менеджеров, то можно включить отладочные логи для самой нижележащей штуки в этом всем (например, hibernate). А потом поставить conditional breakpoint на строчке, которая выводит сырой SQL-запрос. Ее обычно легко найти поиском по области видимости и/или по названию класса из лога. Затем запустить тесты (у вас же хорошее покрытие, да?), словить запрос на строчке с логом, идти вверх по стеку вызовов и смотреть, кто же такой запрос генерирует и в каких случаях.
Tcpdump
Для того, чтобы “по-быренькому” посмотреть трафик на порту, можно использовать команду
tcpdump -n port 8125 -X
Флаг -n
настраивает показ IP-адресов вместо хостов, а -X
— показ содержимого в hex и ASCII. По умолчаю используется основной интерфейс, если нужен localhost — надо добавить -i lo
.
Ну а для продвинутого анализа возможно лучше подойдет Wireshark.
Proxy auto config
Для того, чтобы выйти за пределы “безопасного” интернета, иногда надо использовать прокси. И хочется это делать удобно. Для браузеров есть куча расширений, которые это вроде как предлагают, некоторые даже включают прокси только на заблокированные сайты. Однако эти расширения работают не очень качественно и/или запрашивают разрешения к очень многим вещам (например, почти все просят доступ ко всем данным всех сайтов).
Чтобы шапочка из фольги не жала, можно воспользоваться встроенными настройками браузера, чтобы он ходил на нужные сайты через прокси, а на остальные — без нее. Поможет нам в этом механизм Proxy auto config. Идея его заключается в том, что создается pac-файл, который по сути является скриптом на javascript, реализующим одну функцию: получить адрес прокси для url. Выглядит он примерно так:
function FindProxyForURL(url, host) {
host = host.toLowerCase();
if (shExpMatch(host, "*telegram.org")
|| dnsDomainIs(host, "t.me")
|| dnsDomainIs(host, "telegra.ph")
|| shExpMatch(host, "*media.tumblr.com")
|| dnsDomainIs(host, "httpbin.org")
){
return "SOCKS localhost:9050";
} else {
return "DIRECT";
}
}
Готовые можно найти в интернете. Протестировать самописное можно здесь. А дальше — прописываем в настройке браузера “Automatic proxy configuration URL” путь к файлу, например file:///home/ov7a/proxy_config.pac
.
Отключение "удобств" journalctl
Чтобы заставить journalctl
показывать строки без запихивания в less
(например, чтобы скопировать из лога длинную строку), можно использовать флаг no-pager
:
journalctl --no-pager
Ох уж этот systemd
, который специально делает тебе “удобнее”. Если покопаться в исходниках, то всплывает интересная вещь: запихивать все в какой-нибудь less
— это изначальная функциональность journalctl
, которая появилась одновременно с парсингом аргументов командной строки в коммите “journalctl: add command line parsing”. Еще один повод для нелюбви к Поттерингу, который делает 2 фичи в одном коммите и вдобавок описания плохие делает.
Опрос про баги
В канале админа профунктора был такой опрос. Результаты меня немного опечалили.
Я думаю, что ответ на него в первую очередь зависит от продукта. А еще не хватает варианта(ов) между первым и вторым ответом (или спектра вариантов). Считаю, что да, без багов никуда, но любой баг — это либо непредсказуемые условия (с этим ничего не поделаешь), либо повод улучшать процесс (чтобы подобные баги не могли произойти), либо комбо двух вариантов. Первый вариант в опросе звучит для меня как «баги есть да и хуй с ними». И я думаю, что люди, которые так считают — это рак отрасли.