ServerAdmin.ru
28.9K subscribers
303 photos
35 videos
13 files
2.63K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
​​Какой самый простой способ передать ссылку или небольшой текст с компьютера на смартфон? Правильно, отправить его самому себе через Telegram 😎 Всегда так делаю. А если нет мессенджера? Тут уже начинают шевелиться извилины, так как задача становится не такой уж и тривиальной.

Можно воспользоваться очень простым скриптом на Python, который будет генерировать QR-код из содержимого буфера обмена. Для этого нужна пара библиотек: qrcode и pyperclip.
# pip install qrcode pyperclip
Теперь можно запустить скрипт:
# git clone https://github.com/Louise-h-aa/qrclip.git
# cd qrclip
# python3 qrclip.py

Содержимое буфера обмена окажется в виде QR-code прямо в консоли. Я проверял локально на WSL. Не знаю, сработает ли в консоли сервера. Мне кажется, что нет, так как при подключении по ssh у сервера доступа к локальному буферу не будет.

Я решил сам немного переделать скрипт, чтобы текст для qr-кода можно было передать либо как параметр, либо ввести его в консоль, если скрипт запущен без параметров:

#!/usr/bin/env python3

import sys
from qrcode import QRCode, ERROR_CORRECT_L
def print_qr_code(text: str) -> None:

  qr = QRCode(
    version = 1,
    error_correction = ERROR_CORRECT_L,
    box_size = 10,
    border = 4
  )
  qr.add_data(text)
  qr.make(fit = True)
  qr.print_tty()

if __name__ == "__main__":
  if len (sys.argv) > 1:
    print_qr_code(sys.argv[1:])
  else:
    text: str = input()
    print_qr_code(text)

Это, кстати, наглядный пример простоты изучения Python. Я не умею на нём программировать, но код настолько простой и человекочитаемый, что я просто посмотрел на него, загуглил, как реализуется текстовый ввод в python, а так же передачу текста через параметры командной строки. Посмотрел, как пишется простой цикл и всё реализовал. Потратил буквально 30 минут. Стало интересно самому разобраться. В итоге всё получилось. Завис только на одном моменте. Не знал, как вывести список, пропустив нулевой элемент в нём. В итоге нашёл - [1:].

Теперь можно передать нужную строку в качестве параметра запуска:
# python3 qrclip.py https://ya.ru https://serveradmin.ru

Если хотите изучать программирование, начните с Python. Я помню как посмотрев пару бесплатных уроков, написал простенького бота. Даже публиковал его здесь, но его сразу сломали :) В целом, python очень простой. Его даже приятно изучать и что-то писать, не то что bash.

#python
Ещё немного полезных для сисадминов и девопсов бесплатных курсов со stepik. Я и не думал, что столько народу их знает и проходит. Эта площадка как-то не на слуху. Мало от кого слышал про неё.

Сегодня предлагаю изучать Python. Я когда-то проходил небольшой курс по нему, кое-что программировал. Сделал бота для TG, разобрался, как там всё работает. Но в итоге забросил. В работе особо не нужно. Привык всё на bash писать. Для моих задач хватает. Но если надо какой-то python код посмотреть, разобраться, что там происходит и внести небольшие правки, то могу это сделать. В принципе, это как раз тот уровень, что нужен мне.

"Поколение Python": курс для начинающих. Курс разработан для школьников, для тех, кто изучает программирование с нуля. В нём даётся база: ввод-вывод, условия, типы данных, циклы, списки, функции. Ровно то, что нужно и нам в своей работе. Курс свежий, писался в 2020 году, обновляется, нет плохих отзывов. Победитель конкурса Stepik Awards 2020 в номинации "Лучший бесплатный онлайн-курс размещенный на платформе Stepik". За прохождение дают именной сертификат.

Программирование на Python. Курс от Института биоинформатики, созданного на базе Санкт-Петербургского академического университета РАН и с поддержкой JetBrains. У них в Питере офисы по соседству. Я его сам где-то на треть прошёл и забросил. Как и первый курс, этот адаптирован для новичков непрограммистов, поэтому даётся база. Он значительно короче первого курса, так что если нужны какие-то обзорные знания, то можно пройти его. А потом закрепить первым.

Телеграм-боты на Python и AIOgram. Более прикладной курс для тех, кто уже освоил базу. Здесь учат настраивать окружение, использовать IDE (VS Code), использоваться GIT, работать с API, деплоить код и т.д. Как раз тот уровень, который будет достаточен для инфраструктурщиков.

#обучение #бесплатно #python
​​Я уже много раз упоминал про использование простейшего http сервера на базе python:

# python3 -m http.server 8000

Я его постоянно использую, когда надо быстро откуда-то забрать файлы без лишних телодвижений. Просто перехожу в нужную директорию, запускаю веб сервер, скачиваю файлы, открыв их по ip адресу сервера и завершаю работу веб сервера.

Мне понадобилось для проверки одного приложения запустить https сервер, так как по http оно не работает. Было лень настраивать для этого Nginx. Подумал, что наверное его так же можно быстро поднять с помощью python. Быстро нашёл решение.

Генерируем самоподписный ключ и сертификат в один файл:

# openssl req -new -x509 -keyout localhost.pem -out localhost.pem -days 365 -nodes

Создаём файл webserver.py следующего содержания:

import http.server, ssl

server_address = ('172.20.0.210', 8000)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,server_side=True,certfile='localhost.pem',ssl_version=ssl.PROTOCOL_TLSv1_2)
httpd.serve_forever()

Запускаем веб сервер:

# python3 webserver.py

Идём по адресу https://172.20.0.210:8000 и видим содержимое директории или какой-то сайт, если в ней лежит index.html.

В принципе, можно сохранить этот файл и использовать для передачи файлов, если вам важно передавать по https. Я люблю такие простые и быстрые решения. Так что обязательно сохраню и буду использовать.

#webserver #python
​​Когда мне нужно было быстро поднять smb сервер, чтобы разово перекинуть какие-то файлы, раньше я устанавливал samba и делал для неё простейший конфиг.

Потом в Linux появилась поддержка протокола smb и сервера на его основе в ядре в виде пакета ksmbd. Стал использовать его. Хотя принципиально ни по времени настройки, ни по удобству он особо не выигрывает у самбы. Настройка плюс-минус такая же. В нём основное преимущество в скорости по сравнению с samba, что для разовых задач непринципиально.

На днях в комментариях поделились информацией о том, что есть простой smb сервер на базе python. Решил его попробовать. Он реализован в отдельном пакете python3-impacket.

# apt install python3-impacket

Это довольно обширный набор сетевых утилит, которые обычно используют пентестеры. В том числе там есть и smb сервер. Запустить его можно в одну строку примерно так:

# cd /usr/share/doc/python3-impacket/examples/
# python3 smbserver.py share /mnt/share -smb2support

share - имя шары
/mnt/share - директория для smb сервера, не забудьте на неё сделать права 777, так как доступ анонимный
smb2support - использовать 2-ю версию протокола, если это не добавить, то с Windows 11 подключиться не получится.

Запуск сервера реально простой и быстрый. Не нужны ни конфиги, ни службы. Запускаем в консоли команду, делаем свои дела и завершаем работу сервера. Для разовых задач идеально, если бы не довольно жирный сам пакет impacket.

Если нужна аутентификация, то её можно добавить:

# python3 smbserver.py share /mnt/share -smb2support -username user -password 123

Только учтите, что винда по какой-то причине не предлагает ввести имя пользователя и пароль, а пытается автоматически подключиться, используя имя пользователя и пароль, под которыми вы находитесь в системе в данный момент. Я не очень понял, почему так происходит. Если кто-то знает, поделитесь информацией. По идее, должно вылезать окно аутентификации. Но по логам smbserver вижу, что винда автоматически случится под той учёткой, от которой пытаешься подключиться.

Если подключаться с Linux, то таких проблем нет. Смотрим информацию о сетевых папках сервера:

# smbclient -L 172.20.204.133 --user user --password=123

Подключаемся к настроенной шаре:

# smbclient //172.20.204.133/share --user user --password=123

Такой вот инструмент. В принципе, удобно. Можно использовать наравне с веб сервером.

#python #fileserver