Ответ 1
Попробуйте написать bash script локально и вызывать:
ssh [email protected] 'bash -s' < local_script.sh
Возможный дубликат:
как использовать ssh для запуска оболочки script на удаленном компьютере?
Я пытаюсь сделать bash script, который запускается на моем ежедневном задании cron на удаленном сервере, чтобы автоматически войти в ssh в другой блок unix, запустить несколько команд и затем выйти.
#!/bin/bash
ssh machinehost.com -l admin -p 2222 "/usr/bin/find /share/Public/backups/set0 -mtime +14 | xargs rm -f;
/usr/bin/find /share/Public/backups/set1 -mtime +4 | xargs rm -f;
/usr/bin/find /share/Public/backups/set2 -mtime +3 | xargs rm -f;
/usr/bin/find /share/Public/backups/set3 -mtime +21 | xargs rm -f;
/usr/bin/find /share/Public/backups/set4 -mtime +2 | xargs rm -f;
/usr/bin/find /share/Public/backups/set5 -mtime +2 | xargs rm -f;
"
У меня возникла проблема: мне нужно изменить текущий существующий код, чтобы сделать что-то более сложное перед каждой командой, например
if [ $(ls /share/Public/backups/set1 -1 | wc -l ) -gt 4 ] then run above command
fi
Как я могу запустить эту команду на удаленном компьютере ssh, а не на моем локальном cron one?
Попробуйте написать bash script локально и вызывать:
ssh [email protected] 'bash -s' < local_script.sh
Запишите script, скопируйте его на удаленный компьютер и из ssh запустите только script.
Другим обходным решением является использование python. Существует модуль под названием pexpect, который может решить вашу проблему и даже более сложный сценарий.