Это старый вопрос, и ответ Джейсона работает нормально, но я хотел бы добавить это:
ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH
Это также можно использовать с командами su и, которые требуют ввода пользователем. (обратите внимание, '
избежал наследственности)
Редактировать: так как этот ответ продолжает получать бит трафика, я бы добавил еще больше информации к этому замечательному использованию heredoc:
Вы можете вкладывать команды с этим синтаксисом, и это единственный способ, которым кажется, что вложение работает (в здравом смысле)
ssh user@host <<'ENDSSH'
#commands to run on remote host
ssh user@host2 <<'END2'
# Another bunch of commands on another host
wall <<'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
На самом деле вы можете общаться с некоторыми службами, такими как telnet, ftp и т. Д. Но помните, что heredoc просто отправляет stdin как текст, он не ждет ответа между строками
Редактировать: Я только что узнал, что вы можете сделать отступ внутри вкладок , если вы используете <<-END
!
ssh user@host <<-'ENDSSH'
#commands to run on remote host
ssh user@host2 <<-'END2'
# Another bunch of commands on another host
wall <<-'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<-'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH
(думаю, это должно сработать)
Также см.
http://tldp.org/LDP/abs/html/here-docs.html