Как запускать скрипты Multilogin API на нескольких серверах через Python
Нужно запускать один и тот же скрипт Multilogin API на нескольких серверах? С Python и SSH можно запускать его на всех серверах с одного компьютера, не подключаясь к каждому вручную.
➡️ Создайте токен автоматизации → настройте SSH → добавьте remote_api.py на каждый сервер → запустите auto.py на своем компьютере.
Сначала проверим, что каждый сервер может подключиться к Multilogin API. Для этого запросим список облачных телефонов. Если все работает, тестовый запрос можно заменить своей автоматизацией.
Кому доступна автоматизация?
- 👨💻 Владельцу аккаунта и всем участникам. Доступ к отдельным функциям зависит от роли.
- 💰 На подписке Pro 10 и выше.
Перед началом
Вам понадобятся:
- Python 3 на вашем компьютере и удаленных серверах.
- Доступ к каждому серверу по SSH-ключу.
- Проверенный SSH-ключ хоста для каждого сервера.
- Действующий токен автоматизации Multilogin.
- Интернет на каждом сервере.
SSH и Multilogin используют разные данные для доступа. SSH-ключ подключает вас к серверу, а токен автоматизации дает скрипту доступ к Multilogin API.
В примере используются Linux или macOS
С Windows тоже можно работать, но пути к файлам и команды Python будут отличаться.
Шаг 1: подготовьте серверы
Сначала проверьте, что можете подключиться к каждому серверу по SSH.
Откройте терминал на своем компьютере и выполните:
ssh username@server-ipЗамените username и server-ip своими данными.
Подключаетесь к серверу впервые? Перед добавлением сервера в доверенные попросите администратора подтвердить его SSH fingerprint.
Теперь установите нужные библиотеки Python.
На вашем компьютере:
python3 -m pip install paramikoНа каждом сервере:
python3 -m pip install requestsЕсли используете виртуальное окружение Python, установите библиотеки туда и запускайте скрипты из этого же окружения.
Шаг 2: создайте скрипт для Multilogin API
Сначала сделаем простой тест. Скрипт запросит список облачных телефонов и проверит, может ли сервер подключиться к Multilogin API.
Создайте файл remote_api.py в домашней папке каждого сервера:
import sys
import requests
token = sys.stdin.readline().strip()
if not token:
raise SystemExit("No automation token provided.")
url = "https://api.multilogin.com/mobile_profiles/phone/list"
headers = {
"Authorization": f"Bearer {token}",
"Accept": "application/json",
}
params = {
"page": 1,
"page_size": 10,
}
try:
response = requests.get(
url,
headers=headers,
params=params,
)
response.raise_for_status()
result = response.json()
status = result.get("status", {})
if status.get("http_code") != 200:
raise RuntimeError(
status.get("message", "Unknown API error")
)
print("Connected to Multilogin API successfully.")
except (requests.RequestException, ValueError, RuntimeError) as error:
print(f"API request failed: {error}")
raise SystemExit(1)Токен автоматизации передается скрипту только при запуске. Поэтому сохранять почту, пароль или токен Multilogin в файле не нужно.
Этот тест ничего не меняет. Он только запрашивает первую страницу списка облачных телефонов.
Шаг 3: создайте скрипт для запуска на серверах
Теперь создайте на своем компьютере файл auto.py.
Он подключится к каждому серверу, передаст токен автоматизации и запустит remote_api.py.
import sys
import getpass
import paramiko
servers = [
{"username": "username1", "host": "server1-ip", "port": 22},
{"username": "username2", "host": "server2-ip", "port": 22},
]
token = getpass.getpass("Multilogin automation token: ")
if not token:
raise SystemExit("No automation token provided.")
failed_servers = []
for server in servers:
username = server["username"]
host = server["host"]
port = server.get("port", 22)
print(f"\nConnecting to {username}@{host}")
try:
with paramiko.SSHClient() as ssh:
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(
paramiko.RejectPolicy()
)
ssh.connect(
hostname=host,
port=port,
username=username,
look_for_keys=True,
allow_agent=True,
timeout=15,
)
stdin, stdout, stderr = ssh.exec_command(
"python3 ~/remote_api.py"
)
stdin.write(token + "\n")
stdin.flush()
stdin.channel.shutdown_write()
output = stdout.read().decode().strip()
errors = stderr.read().decode().strip()
exit_code = stdout.channel.recv_exit_status()
if output:
print(output)
if errors:
print(errors)
if exit_code != 0:
print(f"Script failed with exit code {exit_code}")
failed_servers.append(host)
except Exception as error:
print(f"Connection failed: {error}")
failed_servers.append(host)
if failed_servers:
print("\nFailed servers: " + ", ".join(failed_servers))
sys.exit(1)Замените имена пользователей, адреса серверов и порты своими.
Скрипт подключается по SSH-ключам, поэтому хранить пароли от серверов в коде не нужно. Он также подключается только к серверам, которые уже есть в списке доверенных.
Шаг 4: проверьте подключение
- Откройте терминал на своем компьютере.
-
Перейдите в папку с
auto.py. - Запустите:
python3 auto.py- Введите токен автоматизации.
- Посмотрите результат для каждого сервера.
Если все работает, появится:
Connected to Multilogin API successfully.Если на каком-то сервере возникнет ошибка, скрипт покажет, на каком именно.
При вводе токен не виден на экране. Скрипт также не сохраняет и не выводит его.
Шаг 5: замените тест своей автоматизацией
Когда проверка заработает, замените тестовый запрос в remote_api.py на то, что хотите автоматизировать.
Например, можно:
- Получать список облачных телефонов или браузерных профилей.
- Проверять, какие профили открыты.
- Создавать и менять профили.
- Открывать и закрывать поддерживаемые профили.
Так можно, например, проверять профили сразу на нескольких серверах, не подключаясь к каждому вручную.
Все эндпоинты, параметры и примеры ответов есть в документации Multilogin API.
Используете эндпоинты локального launcher?
Если скрипт открывает браузерные профили или управляет ими через локальный launcher API, на сервере должны быть запущены компоненты десктопного приложения Multilogin. Одного подключения к облачному API для этого недостаточно.
Решение проблем
Не получается подключиться по SSH
Попробуйте подключиться вручную:
ssh username@server-ipЕсли не получается, проверьте SSH-ключ и доступ к серверу.
Появилась ошибка неизвестного ключа хоста? Сначала проверьте fingerprint сервера, а потом добавьте его в список доверенных SSH-хостов.
Python не находит библиотеку
Проверьте, где установлена нужная библиотека:
-
На вашем компьютере:
paramiko. -
На серверах:
requests.
Используете виртуальное окружение? Убедитесь, что скрипт запускается тем же Python, в котором установлены библиотеки.
Multilogin API возвращает ошибку
Сначала посмотрите текст ошибки.
Частые варианты:
-
401 – Unauthorized: токен автоматизации отсутствует, неверный или уже истек. -
403 – Forbidden: у проекта или вашей роли нет доступа к запросу. -
429 – Too Many Requests: проект достиг лимита API-запросов.
Подробнее смотрите в статье «Лимиты запросов и коды ответов Multilogin API».
Python не может проверить сертификат API
Такое может произойти при работе через корпоративный прокси или нестандартные сетевые настройки.
Попросите администратора дать вам одобренный пакет сертификатов центра сертификации (CA) и настройте Requests на его использование.
Не отключайте проверку сертификата. Она нужна для безопасного подключения.
Не передавайте токен автоматизации другим
Запускайте скрипты только на серверах, которым доверяете.
Токен передается через зашифрованное SSH-соединение, но во время работы remote_api.py получает к нему доступ. Если кто-то получит доступ к серверу, токен тоже может попасть к этому человеку вместе с доступом к вашему проекту.