Centos 6, Centos 7, отправка email при входе по SSH
Хочу чтобы север отправлял мне письмо если кто-то зашел по SSH (Centos 6, Centos 7)
# mcedit /etc/ssh/sshrc
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | mail -s "SSH Login" info@example.com &
# service sshd restart
Если почтовый сервер хотя бы минимально настроен будут прилетать письма при входе по SSH.
Люси я дома — откуда это
Это из сериала Я люблю Люси, 1951
Прикольная отсылка есть в сериале Сверхестественное
Я же встретил в сериале Звездные врата, 1 сезон, 5 серия
Моргештерн спи*дилтему у Эминема
Концептуальное сходство очевидно
MORGENSHTERN & Элджей — Cadillac
слизан с
Eminem — Godzilla ft. Juice WRLD
SimpleXLSXGen быстрый экспорт в XLSX
Запилил небольшой, но очень полезный класс для экспорта в Excel
$books = [
['ISBN', 'title', 'author', 'publisher', 'ctry' ],
[618260307, 'The Hobbit', 'J. R. R. Tolkien', 'Houghton Mifflin', 'USA'],
[908606664, 'Slinky Malinki', 'Lynley Dodd', 'Mallinson Rendel', 'NZ']
];
$xlsx = SimpleXLSXGen::fromArray( $books );
$xlsx->saveAs('books.xlsx');
Создание Excel файлов в PHP ещё никогда не было таким простым.
REACT-MySQLi (ещё один)
MySQLi из коробки поддерживает асинхронные запросы, я написал ещё одну обёртку/адаптер под ReactPHP.
Репозиторий на GitHub
Установка
composer require shuchkin/react-mysqli
Пример
$loop = \React\EventLoop\Factory::create();
$db = \Shuchkin\ReactMySQLi\Client::connect($loop, 'localhost', 'root', '', 'my_db' );
$db->query('SELECT id,name,email FROM user')->then(
function (\Shuchkin\ReactMySQLi\Result $result) {
print_r( $result->all() ); // array
},
function ( \Exception $ex ) {
trigger_error( $ex->getMessage() );
}
);
$loop->run();
Коды регионов России и почтовые индексы (регион по индексу)
Встала задача добавить код региона в XML версию акта, но у меня был надежным только почтовый индекс адреса, поэтому пришлось собрать такую табличку из 2х таблиц википедии.
Ниже ссылка на CSV. Если будет спрос, оформлю пакетик на гитхабе.
Регион | Конституция | ГИБДД | Почта | ОКАТО | ОКТМО | ISO-3166-2 | ГОСТ 7.67-2003 |
Республика Адыгея | 01 | 01 | 385 | 79 | 79 | RU-AD | RU-AD,RU-ADY |
Республика Алтай | 04 | 04 | 649 | 84 | 84 | RU-AL | RU-AL,RU-ALI |
Республика Башкортостан | 02 | 02,102,702 | 450,451,452,453 | 80 | 80 | RU-BA | RU-BA,RU-BAS |
Республика Бурятия | 03 | 03 | 670,671 | 81 | 81 | RU-BU | RU-BU,RU-BUR |
Республика Дагестан | 05 | 05 | 367,368 | 82 | 82 | RU-DA | RU-DA,RU-DAG |
Республика Ингушетия | 06 | 06 | 386 | 26 | 26 | RU-IN | RU-IN,RU-ING |
Кабардино-Балкарская Республика | 07 | 07 | 360,361 | 83 | 83 | RU-KB | RU-KB,RU-KAB |
Республика Калмыкия | 08 | 08 | 358,359 | 85 | 85 | RU-KL | RU-KL,RU-KAR |
Карачаево-Черкесская Республика | 09 | 09 | 369 | 91 | 91 | RU-KC | RU-KK,RU-KAO |
Республика Карелия | 10 | 10 | 185,186 | 86 | 86 | RU-KR | RU-KL,RU-KAR |
Республика Коми | 11 | 11 | 167,168,169 | 87 | 87 | RU-KO | RU-KO,RU-KOM |
Республика Крым | 91 | 82 | 295,296,297,298 | 35 | 35 | RU-CR | — |
Республика Марий Эл | 12 | 12 | 424,425 | 88 | 88 | RU-ME | RU-ME,RU-MAR |
Республика Мордовия | 13 | 13,113 | 430,431 | 89 | 89 | RU-MO | RU-MO,RU-MOR |
Республика Саха (Якутия) | 14 | 14 | 677,678 | 98 | 98 | RU-SA | RU-SA,RU-SAH |
Республика Северная Осетия — Алания | 15 | 15 | 362,363 | 90 | 90 | RU-SE | RU-NO,RU-NOR |
Республика Татарстан | 16 | 16,116,716 | 420,421,422,423 | 92 | 92 | RU-TA | RU-TA,RU-TAT |
Республика Тыва | 17 | 17 | 667,668 | 93 | 93 | RU-TY | RU-TY,RU-TUV |
Удмуртская Республика | 18 | 18 | 426,427 | 94 | 94 | RU-UD | RU-UD,RU-UDM |
Республика Хакасия | 19 | 19 | 655 | 95 | 95 | RU-KK | RU-KN,RU-KHK |
Чеченская Республика | 20 | 95 | 364,365,366 | 96 | 96 | RU-CE | RU-CE,RU-CHA |
Чувашская Республика | 21 | 21,121 | 428,429 | 97 | 97 | RU-CU | RU-CU,RU-CHV |
Алтайский край | 22 | 22,122 | 656,657,658,659 | 01 | 01 | RU-ALT | RU-ALT |
Забайкальский край | 75 | 75,80 | 672,673,674,687 | 76 | 76 | RU-ZAB | — |
Камчатский край | 41 | 41 | 683,684,688 | 30 | 30 | RU-KAM | RU-KAM |
Краснодарский край | 23 | 23,93,123,193 | 350,351,352,353,354 | 03 | 03 | RU-KDA | RU-KRA |
Красноярский край | 24 | 24,84,88,124 | 660,661,662,663,647,648 | 04 | 04 | RU-KYA | RU-KYA |
Пермский край | 59 | 59,81,159 | 614,615,616,617,618,619 | 57 | 57 | RU-PER | RU-PER |
Приморский край | 25 | 25,125 | 690,691,692 | 05 | 05 | RU-PRI | RU-PRI |
Ставропольский край | 26 | 26,126 | 355,356,357 | 07 | 07 | RU-STA | RU-STA |
Хабаровский край | 27 | 27 | 680,681,682 | 08 | 08 | RU-KHA | RU-KHA |
Амурская область | 28 | 28 | 675,676 | 10 | 10 | RU-AMU | RU-AMU |
Архангельская область | 29 | 29 | 163,164,165 | 11 | 11 | RU-ARK | RU-ARK |
Астраханская область | 30 | 30 | 414,415,416 | 12 | 12 | RU-AST | RU-AST |
Белгородская область | 31 | 31 | 308,309 | 14 | 14 | RU-BEL | RU-BEL |
Брянская область | 32 | 32 | 241,242,243 | 15 | 15 | RU-BRY | RU-BRY |
Владимирская область | 33 | 33 | 600,602,602 | 17 | 17 | RU-VLA | RU-VLA |
Волгоградская область | 34 | 34,134 | 400,401,402,403,404 | 18 | 18 | RU-VGG | RU-VGG |
Вологодская область | 35 | 35 | 160,161,162 | 19 | 19 | RU-VLG | RU-VLG |
Воронежская область | 36 | 36,136 | 394,395,396,397 | 20 | 20 | RU-VOR | RU-VOR |
Ивановская область | 37 | 37 | 153,154,155 | 24 | 24 | RU-IVA | RU-IVA |
Иркутская область | 38 | 38,85,138 | 664,665,666,667,668,669 | 25 | 25 | RU-IRK | RU-IRK |
Калининградская область | 39 | 39,91 | 236,237,238 | 27 | 27 | RU-KGD | RU-KAG |
Калужская область | 40 | 40 | 248,249 | 29 | 29 | RU-KLU | RU-KAL |
Кемеровская область | 42 | 42,142 | 650,651,652,653,654 | 32 | 32 | RU-KEM | RU-KEM |
Кировская область | 43 | 43 | 610,611,612,613 | 33 | 33 | RU-KIR | RU-KIR |
Костромская область | 44 | 44 | 156,157 | 34 | 34 | RU-KOS | RU-KOS |
Курганская область | 45 | 45 | 640,641 | 37 | 37 | RU-KGN | RU-KUG |
Курская область | 46 | 46 | 305,306,307 | 38 | 38 | RU-KRS | RU-KUR |
Ленинградская область | 47 | 47,147 | 187,188 | 41 | 41 | RU-LEN | RU-LEN |
Липецкая область | 48 | 48 | 398,399 | 42 | 42 | RU-LIP | RU-LIP |
Магаданская область | 49 | 49 | 685,686 | 44 | 44 | RU-MAG | RU-MAG |
Московская область | 50 | 50,90,150,190,750,790 | 140,141,142,143,144 | 46 | 46 | RU-MOS | RU-MOS |
Мурманская область | 51 | 51 | 183,184 | 47 | 47 | RU-MUR | RU-MUR |
Нижегородская область | 52 | 52,152 | 603,607 | 22 | 22 | RU-NIZ | RU-NIZ |
Новгородская область | 53 | 53 | 173,174,175 | 49 | 49 | RU-NGR | RU-NGR |
Новосибирская область | 54 | 54,154 | 630,631,632,633 | 50 | 50 | RU-NVS | RU-NVS |
Омская область | 55 | 55 | 644,645,646 | 52 | 52 | RU-OMS | RU-OMS |
Оренбургская область | 56 | 56 | 460,461,462 | 53 | 53 | RU-ORE | RU-ORE |
Орловская область | 57 | 57 | 302,303 | 54 | 54 | RU-ORL | RU-ORL |
Пензенская область | 58 | 58 | 440,441,442 | 56 | 56 | RU-PNZ | RU-PNZ |
Псковская область | 60 | 60 | 180,181,182 | 58 | 58 | RU-PSK | RU-PSK |
Ростовская область | 61 | 61,161,761 | 344,345,346,347 | 60 | 60 | RU-ROS | RU-ROS |
Рязанская область | 62 | 62 | 390,391 | 61 | 61 | RU-RYA | RU-RYA |
Самарская область | 63 | 63,163,763 | 443,444,445,446 | 36 | 36 | RU-SAM | RU-SAM |
Саратовская область | 64 | 64,164 | 410,411,412,413 | 63 | 63 | RU-SAR | RU-SAR |
Сахалинская область | 65 | 65 | 693,694 | 64 | 64 | RU-SAK | RU-SAK |
Свердловская область | 66 | 66,96,196 | 620,621,622,623,624 | 65 | 65 | RU-SVE | RU-SVE |
Смоленская область | 67 | 67 | 214,215,216 | 66 | 66 | RU-SMO | RU-SMO |
Тамбовская область | 68 | 68 | 392,393 | 68 | 68 | RU-TAM | RU-TAM |
Тверская область | 69 | 69 | 170,171,172 | 28 | 28 | RU-TVE | RU-TVE |
Томская область | 70 | 70 | 634,635,636 | 69 | 69 | RU-TOM | RU-TOM |
Тульская область | 71 | 71 | 300,301 | 70 | 70 | RU-TUL | RU-TUL |
Тюменская область | 72 | 72 | 625,626,627 | 71 | 71 | RU-TYU | RU-TYU |
Ульяновская область | 73 | 73,173 | 432,433 | 73 | 73 | RU-ULY | RU-ULY |
Челябинская область | 74 | 74,174 | 454,455,456,457 | 75 | 75 | RU-CHE | RU-CHE |
Ярославская область | 76 | 76 | 150,151,152 | 78 | 78 | RU-YAR | RU-YAR |
Москва | 77 | 77,97,99,177,197,199,777,799 | 101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135 | 45 | 45 | RU-MOW | RU-MS,RU-MOW |
Санкт-Петербург | 78 | 78,98,178,198 | 190,191,192,193,194,195,196,197,198,199 | 40 | 40 | RU-SPE | RU-SP,RU-SPB |
Севастополь | 92 | 92 | 299 | 67 | 67 | RU-SEV | — |
Еврейская автономная область | 79 | 79 | 679 | 99 | 99 | RU-YEV | RU-JEW |
Ненецкий автономный округ | 83 | 83 | 166 | 111 | 118 | RU-NEN | RU-NEN |
Ханты-Мансийский автономный округ — Югра | 86 | 86,186 | 628 | 7110 | 718 | RU-KHM | RU-KHM |
Чукотский автономный округ | 87 | 87 | 689 | 77 | 77 | RU-CHU | RU-CHU |
Ямало-Ненецкий автономный округ | 89 | 89 | 629 | 7114 | 719 | RU-YAN | RU-YAN |
9g — No Magic
Допилил лайтовый дапсетпчик — свежо и интересно
kannel и supervisord
Забудь про init.d и кривой скрипт из интернета. Вот тебе четкий конфиг /etc/supervisord.conf отсюда https://github.com/antenehrepos/docker-kannel/blob/master/supervisord.conf
[supervisord]
nodaemon=true
[program:bearerbox]
command=/usr/local/kannel/sbin/bearerbox -v 2 /etc/kannel/kannel.conf
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
priority=1
[program:smsbox]
command=/usr/local/kannel/sbin/smsbox -v 2 /etc/kannel/kannel.conf
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
priority=2
#[program:wapbox]
#command=/usr/local/kannel/sbin/wapbox -v 2 /etc/kannel/kannel.conf
#redirect_stderr=true
#stdout_logfile=/dev/fd/1
#stdout_logfile_maxbytes=0
#priority=2
#[program:sqlbox]
#command=/usr/local/kannel/sbin/sqlbox -v 2 /etc/kannel/kannel.conf
#redirect_stderr=true
#stdout_logfile=/dev/fd/1
#stdout_logfile_maxbytes=0
#priority=3
#[program:smppbox]
#command=/usr/local/kannel/sbin/opensmppbox -v 2 /etc/kannel/opensmppbox.conf
#stdout_logfile=/dev/fd/1
#stdout_logfile_maxbytes=0
#priority=3
Теперь ты как белый человек можешь написать в консоли:
supervisord restart bearerbox
supervisord restart smsbox
Я же как сторонник веба открыл для себя доступ /etc/kannel.conf
group = core
admin-port = 13000
admin-password = PWD
...
И просто открываю в браузере или вызываю скриптом:
example.com:13000/graceful-restart?password=PWD
MySQL аналог htmlspecialchars
Вот-так прогнал таблицу через html экранирование уже постфактум.
UPDATE messages SET message = REPLACE(REPLACE(REPLACE(message,'&','&'),'<', '<'), '>', '>')
Суть асимметричного шифрования
Я использую TLS очень часто, как пользователь (Госуслуги, Диадок и т.д.) где зоопарк из всяких рутокенов, криптопрох и т.п., как администратор (доступ по SSH, установка сертификатов для Nginx), и как программист, когда например самописному SMTP серверу нужно добавить поддержку STARTLS или заглушить ругань PHP отключая проверку хоста:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
Вот не втыкал я как оно работает, тупо следовал инструкциям и примерам, понимая только в общих чертах. А сегодня прочитал этот абзац в статье про SSL/TLS и всё встало на свои места: весь опыт и теория.

Суть асимметричного шифрования заключается в том, что используется пара ключей. Один из них используется в качестве открытого (как правило, он публикуется в самом сертификате владельца), второй ключ называется секретным — он держится в тайне и никогда никому не открывается. Оба ключа работают в паре: один используется для запуска противоположных функций другого ключа. Если открытый ключ используется для того, чтобы зашифровать данные, то расшифровать их можно только секретным ключом и наоборот. Такая взаимосвязь позволяет делать две важные вещи.
Любой пользователь может получить открытый ключ и использовать его для шифрования данных, расшифровать которые может только пользователь, владеющий секретным ключом. (RSA)
Если кто-то шифрует данные, используя свой секретный ключ, каждый может расшифровать эти данные, используя соответствующий открытый ключ. Именно это является основой для цифровых подписей. (DSA)
RSA — самый распространенный алгоритм шифрования с использованием асимметричных ключей.