Я имею ниже shell
сценарий, в котором я - вход в систему в конкретную машину, теперь я должен выполнить одну команду после того, как вход в систему в, эта команда начинать/останавливаться/состояние конкретного процесса.
#!/usr/bin/expect -f
spawn ssh root@hostname
expect "Password:"
send "password123\r"
interact # here it is successfully login into machine,
sleep 2
/sbin/service heartbeat status # I want to execute this command
как я могу сделать это??
Можно использовать
ssh user@hostname "command"
, Это откроет соединение SSH и выполнит команду. Вам предложат пароль при необходимости.
, Если Вы хотите сделать это автоматически (не хотят вводить Ваш пароль каждый раз), необходимо включить вход в систему с ssh-pub-key.
Однажды интерактивное ssh
экземпляр порожден, он принимает ток bash
экземпляр, и следующие команды не выполняются, пока он не закончил свое выполнение.
user@user-X550CL ~ % ssh user@localhost; echo string
user@localhost's password:
Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-15-generic x86_64)
* Documentation: https://help.ubuntu.com/
Last login: Tue Sep 15 09:10:01 2015 from localhost
user@user-X550CL ~ % exit
Connection to localhost closed.
string
существует несколько способов решить это;
spawn ssh root@hostname /sbin/service heartbeat status
user@user-X550CL ~/tmp % ssh user@localhost echo command1
user@localhost's password:
command1
user@user-X550CL ~/tmp % ssh user@localhost 'echo command1; echo command2; echo command3'
user@localhost's password:
command1
command2
command3
user@user-X550CL ~/tmp %
stdin
перенаправление: user@user-X550CL ~/tmp % ssh user@localhost <script.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
user@localhost's password:
Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-15-generic x86_64)
* Documentation: https://help.ubuntu.com/
command1
command2
command3
user@user-X550CL ~/tmp %