Отправка команд по ssh
Материал из IT в школе
Иногда надо отпраивть по ssh целый скрипт с объёмным кодом и разными кавычками. Лучше всего передавать это в base64.
Инструкция на примере скрипта для проверок компьютеров для МЦКО.
Создаём файл script.sh с содержимым:
#!/bin/bash
set -eu # При ошибке в какой-то команде заканчивать скрипт
py-ini-config del /etc/skel/.config/powermanagementprofilesrc "AC][DPMSControl" idleTime --flush
sleep 5
qdbus --system org.mos.auth / login guest ''
sleep 15
py-ini-config del /home/guest/.config/powermanagementprofilesrc "AC][DPMSControl" idleTime --flush
sleep 15
qdbus --system org.mos.auth.guest / runDetach "chromium-browser 'https://ВАШ.mcko.ru/test/?action=DoLogin&template=17644&login=ВАШ&password=ВАШ' & xdotool sleep 10 key Tab Tab Tab Return "
shutdown 17:10
Выполняем команду, которая не только закодирует в base64, но и сожмёт его, чтобы меньше передавать:
cat script.sh | xz -9 | base64 -w 0
Получим на выходе строку вроде:
$ cat script.sh | xz -9 | base64 -w 0
/Td6WFoAAATm1rRGBMCuAuwDIQEcAAAAAAAAAESLqxHgAesBJl0AEYhCRj30GGqmZ696oTzdwPzPhj8LNrdap74s5gihym1mGabDBJZbK4rPi1BXM/fXwsqTFmqii1JyMHIkzF8hdFSIP4Vwk378J5Efp0KCqiPHB4pTZadckhnmYSPqVefMoMEX/200CC4ZxPt211TsXVIU8UMd74jBORIp6QuPK7JAOZMEcDeRmvVOfcMevDjzQ7Pp0V80vb/DuYSLWRuynKhongptftmDwOhZz2+OTPOL2WynvSlmuDG5MwI/oS06E8WHN84ZJ+QmChipa8c0LcqiBAlONie9K72tFsDN/GEGS3fw604xL/ORipKYByYlJWHmh0B+dy0lDa7XoWjTXxqw+4FpjNuhI9k22mUERucZIn4PJyvt26RrlunBcRqb03qJX0EAAAAA6O9XO0d3usgAAcoC7AMAALb6CZexxGf7AgAAAAAEWVo=
Теперь можно отправлять команду через Управление компьютерным классом:
tmp="$(mktemp)" && echo "/Td6WFoAAATm1rRGBMCuAuwDIQEcAAAAAAAAAESLqxHgAesBJl0AEYhCRj30GGqmZ696oTzdwPzPhj8LNrdap74s5gihym1mGabDBJZbK4rPi1BXM/fXwsqTFmqii1JyMHIkzF8hdFSIP4Vwk378J5Efp0KCqiPHB4pTZadckhnmYSPqVefMoMEX/200CC4ZxPt211TsXVIU8UMd74jBORIp6QuPK7JAOZMEcDeRmvVOfcMevDjzQ7Pp0V80vb/DuYSLWRuynKhongptftmDwOhZz2+OTPOL2WynvSlmuDG5MwI/oS06E8WHN84ZJ+QmChipa8c0LcqiBAlONie9K72tFsDN/GEGS3fw604xL/ORipKYByYlJWHmh0B+dy0lDa7XoWjTXxqw+4FpjNuhI9k22mUERucZIn4PJyvt26RrlunBcRqb03qJX0EAAAAA6O9XO0d3usgAAcoC7AMAALb6CZexxGf7AgAAAAAEWVo=" | base64 -d | xz -d > "$tmp" && bash "$tmp"