tgoop.com/srv_admin/2904
Last Update:
В копилку полезных админских утилит Unix с примерами — socat. В общем случае это утилита для организации двунаправленных потоков передачи данных. При этом поддерживается большое количество типов потоков: файлы, пайпы, сокеты (unix, сетевые), различные устройства, в том числе консольного ввода. Это делает утилиту socat применимой в очень широком диапазоне ситуаций.
Самый простой пример использования socat аналогично telnet. Передаём данные с консоли ( -
) на какой-то сервис (smtp.yandex.ru:25
). Например, почтовый сервер:# socat - TCP4:smtp.yandex.ru:25
Попробуем пообщаться:helo serveradmin.ru
mail from:<[email protected]>
Получаем ошибку:503 5.5.4 Error: send AUTH command first.
Всё четко. Без аутентификации отправка невозможна. Примерно таким образом сервисы или вы лично можете убедиться в том, что ваш почтовый сервер не станет общедоступным релеем для рассылки спама.
А вот пример использования socat для перенаправления локальных запросов к порту 8080 на удалённый веб сервер:# socat TCP4-LISTEN:8080 TCP4:10.20.1.25:80
Теперь можно тут же локально обратиться на удалённый веб сервер:# curl localhost:8080 -L -H "Host: serveradmin.ru"
Для того, чтобы после единичного подключения поток не прерывался, надо добавить немного опций:# socat TCP4-LISTEN:8080,fork,reuseaddr TCP4:10.20.1.25:80
Так как поддерживаются различные типы потоков, то по аналогии можно в качестве приёмника или источника данных указать unix сокет. Например, вот так:# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/run/mysqld/mysqld.sock
Это может пригодится, если вы, к примеру, запустили mysql сервер с доступом к нему только через unix сокет, но при этом хотите разово, а может и не разово, подключиться к нему по сети. Но при этом не можете изменить конфигурацию сервера и перезапустить его. Теперь можно проверить соединение через тот же socat или telnet:# telnet 172.23.92.42 3307
Причём эту идею можно развить дальше. Берём какой-то тестовый веб сервер, с которого мы хотим подключаться к удалённому mysql серверу, но при этом точно так же, как будто он локальный. Для этого, как показано выше, на сервере с mysql открываем доступ к сокету по сети, а на удалённом сервере создаём локальный unix socket:# socat UNIX-LISTEN:/run/mysqld/mysqld.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 \
TCP:172.23.92.42:3307
Получили сокет mysql от удалённого сервера, как будто он локальный. С теми же правами доступа и владельцем.
Таким образом можно создавать очень замысловатые связки. Конечно, в проде такое использовать не имеет смысла. А нужно в основном в момент отладки, или в тестовых окружениях.
Это всего лишь несколько прикладных примеров с socat. Умеет он гораздо больше. Например, отправлять широковещательные сетевые запросы. Возможно, разовью ещё эту тему в отдельных заметках.
#linux #terminal
BY ServerAdmin.ru

Share with your friend now:
tgoop.com/srv_admin/2904