Можно ли выполнить операцию оболочки из скрипта bash через безопасную оболочку.

Вот пример того, почему вы можете сделать это. Допустим, у вас есть простая операционная система Unix, которую вам нужно только собрать и запустить, но вы хотите заняться разработкой на другом компьютере. Я хочу написать скрипт bash, который имеет следующие функциональные возможности:

scp file to location on other machine
ssh to other machine
cd into correct directory 
make 
run program
scp results to file on original computer
exit ssh

Возможно ли это дистанционно? (Простите за каламбур:p)

3 ответа3

2

Как прямой пример вашего псевдокода,

scp file remote:/tmp/file
ssh remote 'cd /tmp; cat file >another; rm another'
scp remote:/tmp/another /tmp

Возможно, вы хотите избежать использования временных файлов; если вы можете использовать стандартный ввод и стандартный вывод для этого, вам может сойти с рук что-то вроде

ssh remote 'remotescriptname' <input >output

... при условии, что remotescriptname может читать стандартный ввод и в итоге выдает результат на стандартном выводе. (Вы хотите, чтобы шумовые команды, такие как make производили вывод на стандартный вывод; make -s - ваш друг.)

Вы заметите, что между одинарными кавычками может быть совершенно сложный фрагмент сценария оболочки. Не нужно использовать имя remotescriptname программы, если вы предпочитаете помещать всю командную строку отдельных команд между одинарными кавычками, как в моем первом примере; но в любом случае вы можете захотеть, потому что автономный скрипт легче отлаживать и поддерживать.

1

Да, это возможно. Например:

$ echo 'date' | ssh localhost
Pseudo-terminal will not be allocated because stdin is not a terminal.
Password:
Sun Dec 16 22:15:08 CST 2012

Я предлагаю вам создать сценарий на удаленной стороне, который будет выполнять сборку и возвращать данные об успешном завершении, чтобы минимизировать количество удаленных команд, которые вам нужно отправить. Кроме того, создание ключа RSA без пароля также облегчит вашу жизнь.

РЕДАКТИРОВАТЬ:

Пока мы обсуждаем эту тему, вас могут заинтересовать некоторые из этих программ.

distcc: Распределить сборки по нескольким машинам

buildbot: автоматическая сборка кода при его регистрации на любом количестве машин / ОС, запуск модульных тестов и т. д.

1

ssh user1 @ server1 '/scripts/backup.sh' запустит скрипт на удаленной машине. Вы можете просто запустить scp "backup.sh" в нужном месте, вызвать ssh и выйти

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .