dscp — dsh like мордочка для scp/ssh

tl;dr

Я не осилил dsh на арме, вот что-то похожее на шеле: dscp

Умеет только последовательно, только ssh, не умеет в параметры ssh, зато может копировать файл на несколько серверов

Лирическое отступление

Когда-то давно я начал пользоваться dsh (если кто не знает то это такая фигня которая запускает несколкьо команд ssh/rsh последовательно или паралелно), но в какой-то момент понадобилося что-то похожее и на мобиле, а потом и на малинке. И там и там dsh отсутсвовал 😞

Конечно есть куча всяких альтернатив и разнообразных distributed/paralell shell вплоть до одновременного запуска в регионах какого-нибудь tmux'а

Но больно уж я привык за долгие годы к тому как я использую dsh (тупо последовательный запуск ssh и иногда остановка по ^+c), да и конфигов групп набралось изрядно. Cделать аналог где есть то что мне надо не так уж и сложно, ведь на мобиле я и так иногда for для нескольких серваков запускаю. В итоге родился shell-скрипт враппер который делает for по серверам из групп dsh и запускает ssh server command. Постепенно скрпит заменил dsh и на компе, а спустя какое-то время мне задолбало каждый раз писать for для scp на несколько серверов и в скрипт было добавлено такое копирование

Через какое-то время запуск этого скрипта попал в один из рабочих мануалов и я был несколько удивлен вопросом «где брать dscp?)», я-то уже считал что dscp чуть ли не по умолчанию вместе с openssh идет, пришлось дописать usage попутно объясняя как оно работает. Ну а спустя почти пол года (сегодня) решил его выложить публично, несмотря на известные мне проблемы

Сам я использую dscp в termux на телефоне и в арче на малинке, глядишь когда-нить понадобиться паралельный запуск дык и добавлю в скрипт чтение конфига dsh, ну или & в строке запуска ssh 😆

Пример работы

# группы dsh выглядят обычно так
# cat /.dsh/group/servergroup
server1
server2
server3

# копирование
dscp servergroup cp ~/testfile /tmp/test
# запустит
scp ~/testfile server1:/tmp/test
scp ~/testfile server2:/tmp/test
scp ~/testfile server3:/tmp/test

# запуск аля dsh
dscp servergroup uname -a
# запустит
ssh server1 uname -a
ssh server2 uname -a
ssh server3 uname -a

Установка

DSCP='/usr/local/bin/dscp' && curl -o $DSCP https://raw.githubusercontent.com/muhas/dscp/master/dscp && chmod +x $DSCP && unset DSCP

Для арчеводов есть опакеченое тынц

Мысли вслух

Что-то много текста о скрипте в несколько десяток строк. Ридми и тот вышел длиннее чем сам скрипт 🤪

Но вдруг кому-то кроме меня такой простой аналог dsh нужен, а самому писать лень