Remote Execution of sudo Command Hangs.
Martin McCormick
martin at dc.cis.okstate.edu
Fri Jul 27 19:53:54 UTC 2007
We have 3 FreeBSD systems. One is trying to use ssh and sudo to
run commands on two other systems. The remote command being
executed is:
ssh remote.system.domain sudo dhcpreset
dhcpreset is an expect script most of which is shown
here:
spawn $env(SHELL)
expect -exact "\#"
send -- "date\r"
expect -exact "\#"
#body start
send -- "cd /usr/local/etc\r"
expect -exact "\#"
send -- "/usr/local/etc/zap dhcpd\r"
expect -exact "\#"
send_user "Stopped [exec hostname] dhcpd at [exec date +%y%m%d%H%M%S ].\n\r"
send -- "/usr/local/sbin/dhcpd -q &\r"
expect -exact "\#"
send_user "Partially restarted [exec hostname] dhcpd at [exec date +%y%m%d%H%M%S ].\n\r"
send -- "tail -1f /var/log/syslog\r"
expect -exact "peer moves from communications-interrupted to normal"
send -- "$CONTROL_C"
#body end
expect -exact "\#"
send_user "Fully restarted dhcpd at [exec date +%y%m%d%H%M%S ].\n\r"
send -- "date;exit\r"
expect eof
The script works perfectly if you run it from a login
shell on the system where it actually lives as in:
sudo dhcpreset.
If you run it via ssh from a remote system, however, it
runs, produces the proper status messages and does its job and
then . . . . . .
You have to hit a Control-C to kill off the ssh
connection which doesn't drop on its own.
I think my script must somehow make sudo not see the
exit. Even though you see the dhcpd -q process started as a
background process, dhcpd daemonizes almost immediately and you
even see the completion message in a log of the activity so it
isn't that. Besides, it exits properly when called locally.
Other remote commands using sudo properly exit. Any idea
how I might figure out what is hanging things up?
If you do a ps on the remote system, the expect script
has ended. On the calling system, you still see ssh to the
remote system.
Reading the expect manual shows an exit command but also
says that it is implied when the end of the script is reached. I
have tried it with and without that command at the end with no
effect.
Thanks for any other suggestions for making this command
terminate when done.
More information about the freebsd-questions
mailing list