Если вам нужно выполнить десятки или сотни SSH-команд подряд, стандартный подход ssh host cmd превращается в ад: каждый вызов открывает новое TCP-соединение, делает handshake, обмен ключами, проверку known_hosts и все это ради одной короткой команды. Но SSH умеет работать совершенно иначе, через
multiplexing. Это когда одно физическое SSH-соединение становится трубой для десятков логических каналов. Команды выполняются без задержек, почти как локальные.▪️ Включаем connection pooling. Создаем master-socket:
ssh -M -S /tmp/ssh-sock-%r@%h:%p user@server
-M - включить master-режим,-S - путь до сокета.Теперь вторичные команды идут через master:
ssh -S /tmp/ssh-sock-%r@%h:%p user@server "hostname"
ssh -S /tmp/ssh-sock-%r@%h:%p user@server "uptime"
ssh -S /tmp/ssh-sock-%r@%h:%p user@server "df -h"
Все эти вызовы выполняются почти мгновенно.
▪️ Автоматизация: ~/.ssh/config. Чтобы не писать все вручную:
Host *
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
Теперь SSH сам создает и держит мастер-сессию 10 минут после последней команды.
▪️ Массовый запуск команд по списку
#!/bin/bash
for host in $(cat hosts.txt); do
ssh "$host" "uptime" &
done
wait
▪️ Завершение мастер-сессии
ssh -O exit -S ~/.ssh/cm-user@host:22 host
BashTex 📱 #bash #utils