SSH를 통해 원격 서버에서 일부 명령을 실행하는 bash 스크립트를 작성하고 싶습니다. 그런 다음 원격 서버를 다시 시작하고 SSH를 통해 다시 연결한 후 추가 명령을 실행해야 합니다.
나는 이 코드를 사용하고 있습니다 :
ssh $theip 'sudo reboot'
echo "starting sleep---1"
sleep 30
echo " finished sleeping1"
while ! ping -c 1 $theip &>/dev/null; do echo "waiting..."; done
echo "starting sleep---2"
sleep 45
echo " finished sleeping2"
echo "finished rebooting"
ssh $theip 'commands....'
문제는 때때로 서버가 ssh를 수행하기 전에 ping을 반환한 다음 스크립트가 실패한다는 것입니다. 일부 서버에는 45초 이상의 절전 시간이 필요합니다. 다른 방법이 있나요? 예를 들어 while 루프에서 ping 대신 ssh를 사용해 보세요.
감사해요,
답변1
"sticky ssh"를 얻으려면 다음 명령을 사용해 보십시오:
while true; do command ssh "$@"; [ $? -eq 0 ] && break || sleep 0.5; done
답변2
ls -l
런레벨에 따라 행동하거나 /etc/rc3.d
런레벨 /etc/rc5.d
에 따라 행동하십시오. 여기서 네트워크 데몬은 ssh 데몬보다 먼저 시작된다는 점에 유의해야 합니다. 따라서 ping
이전에 사용 가능합니다 ssh
. 원격 컴퓨터에서 실행하기 전에 wait
좀 더 많은 작업을 수행 해야 합니다. ssh
내 경우에는 네트워크 이후부터 SSH 이전까지 19개 정도의 서비스가 시작됐다.
lrwxrwxrwx 1 root root 17 Sep 9 2011 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 Sep 9 2011 S11auditd -> ../init.d/auditd
lrwxrwxrwx 1 root root 21 Sep 9 2011 S12restorecond -> ../init.d/restorecond
lrwxrwxrwx 1 root root 16 Sep 9 2011 S12syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 20 Sep 9 2011 S13irqbalance -> ../init.d/irqbalance
lrwxrwxrwx 1 root root 19 Sep 9 2011 S15mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx 1 root root 19 Sep 9 2011 S18rpcidmapd -> ../init.d/rpcidmapd
lrwxrwxrwx 1 root root 17 Sep 9 2011 S19rpcgssd -> ../init.d/rpcgssd
lrwxrwxrwx 1 root root 15 Sep 9 2011 S20kdump -> ../init.d/kdump
lrwxrwxrwx 1 root root 20 Sep 9 2011 S22messagebus -> ../init.d/messagebus
lrwxrwxrwx 1 root root 24 Sep 9 2011 S23setroubleshoot -> ../init.d/setroubleshoot
lrwxrwxrwx 1 root root 15 Sep 9 2011 S25netfs -> ../init.d/netfs
lrwxrwxrwx 1 root root 15 Sep 9 2011 S25pcscd -> ../init.d/pcscd
lrwxrwxrwx 1 root root 15 Sep 9 2011 S26acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root 19 Sep 9 2011 S26haldaemon -> ../init.d/haldaemon
lrwxrwxrwx 1 root root 14 Sep 9 2011 S26hidd -> ../init.d/hidd
lrwxrwxrwx 1 root root 20 Sep 9 2011 S26lm_sensors -> ../init.d/lm_sensors
lrwxrwxrwx 1 root root 16 Sep 9 2011 S28autofs -> ../init.d/autofs
lrwxrwxrwx 1 root root 15 Sep 9 2011 S50hplip -> ../init.d/hplip
lrwxrwxrwx 1 root root 15 Sep 13 2011 S50snmpd -> ../init.d/snmpd
lrwxrwxrwx 1 root root 14 Sep 9 2011 S55sshd -> ../init.d/sshd