{"id":339,"date":"2012-01-03T23:10:55","date_gmt":"2012-01-03T22:10:55","guid":{"rendered":"http:\/\/diablo.craem.net\/wordpress\/?p=339"},"modified":"2012-01-03T23:10:55","modified_gmt":"2012-01-03T22:10:55","slug":"script-ssh-en-linux-con-expect-para-copiar-grabaciones-de-cisco-ccm","status":"publish","type":"post","link":"https:\/\/diablo.craem.net\/?p=339","title":{"rendered":"Script SSH en linux con expect para copiar grabaciones de Cisco CCM"},"content":{"rendered":"<p>Esta semana he tenido que realizar un script para copiar las grabaciones de un callmanager de cisco por ssh y volcarlas en un servidor, por SSH.<br \/>\nLos requisitos:<br \/>\n1\u00ba) conectarme por SSH al CCM<br \/>\n2\u00ba) Ejecutar unas instrucciones y esperar respuesta del CCM<br \/>\n3\u00ba) Eliminar las grabaciones, una vez pasadas al servidor<br \/>\nNos ponemos manos a la obra&#8230;..<br \/>\n<code><br \/>\n#cd \/usr\/local\/bin<br \/>\n#nano copia.sh<br \/>\n<\/code><br \/>\nTenemos el fichero en blanco y pegamos &#8230;<br \/>\n<code><br \/>\n#!\/usr\/bin\/expect<br \/>\nset timeout -1<br \/>\nspawn ssh usuario@ip_del_ccm<br \/>\nexpect \"password:\"<br \/>\nsend \"passwordn\"<br \/>\nexpect \"admin:\"<br \/>\nsend \"file get activelog \/uccx\/recordings\/ n\"<br \/>\nexpect \"Would you like to proceed \"<br \/>\nsend \"yn\"<br \/>\nexpect \"SFTP server IP: \"<br \/>\nsend \"192.168.XXX.XXX n\"<br \/>\nexpect \"SFTP server port \"<br \/>\nsend \"22n\"<br \/>\nexpect \"User ID: \"<br \/>\nsend \"usuarioSSHn\"<br \/>\nexpect \"Password:\"<br \/>\nsend \"passwordSSHn\"<br \/>\nexpect \"Download directory:\"<br \/>\nsend \"\/n\"<br \/>\nexpect \"admin:\"<br \/>\nsend \"utils uccx recordings purge 1000 [exec date +%m\/%e\/20%y] 23:59:59n\"<br \/>\nexpect \"press\"<br \/>\nsend \"Y\"<br \/>\nexpect \"admin:\"<br \/>\nsend \"quitn\"<br \/>\nexpect eof<br \/>\n<\/code><br \/>\nVamos por partes y lo explicamos&#8230;..<br \/>\nPrimero, en nuestro debian, instalamos el paquete <strong>expect<\/strong><br \/>\n<code><br \/>\n#apt-get install expect<br \/>\n<\/code><br \/>\nY Ahora explicamos las l\u00ed\u00adneas:<br \/>\n<code><br \/>\n#!\/usr\/bin\/expect<br \/>\nset timeout -1<br \/>\n<\/code><br \/>\nPonemos el timeout a -1 para que espere de manera indefinida&#8230;. cuando copiemos las grabaciones, se puede pasar m\u00e1s de 20 minutos copiando&#8230; y como no sabemos cu\u00e1nto tiempo, pues que espere&#8230;<br \/>\n<em>spawn ssh usuario@ip_del_ccm<\/em><br \/>\n&#8211;> nos conectamos por ssh<br \/>\n<em>expect \u00abpassword:\u00bb<\/em><br \/>\n&#8211;> esperamos a que nos pida el servidor el password<br \/>\n<em>send \u00abpasswordn\u00bb<\/em><br \/>\n&#8211;> enviamos el password<br \/>\n<em>expect \u00abadmin:\u00bb<\/em><br \/>\n&#8211;> ahora el callmanager espera a que pongamos la instrucci\u00f3n<br \/>\n<em>send \u00abfile get activelog \/uccx\/recordings\/ n\u00bb<\/em><br \/>\n&#8211;> activamos el env\u00ed\u00ado de las grabaciones<br \/>\n<em>expect \u00abWould you like to proceed \u00ab<\/em><br \/>\n&#8211;> nos pide confirmaci\u00f3n<br \/>\n<em>send \u00abyn\u00bb<\/em><br \/>\n&#8211;> pues eso, que <em>Y<\/em>es<br \/>\n<em>expect \u00abSFTP server IP: \u00ab<\/em><br \/>\n&#8211;> Esperamos a que nos pida el servidor SSH<br \/>\n<em>send \u00ab192.168.XXX.XXX n\u00bb<\/em><br \/>\n&#8211;> Le enviamos la IP<br \/>\n<em>expect \u00abSFTP server port \u00ab<\/em><br \/>\n&#8211;> Nos pide el puerto<br \/>\n<em>send \u00ab22n\u00bb<\/em><br \/>\n&#8211;> El 22<br \/>\n<em>expect \u00abUser ID: \u00ab<\/em><br \/>\n&#8211;> nos pide el usuario<br \/>\n<em>send \u00abusuarioSSHn\u00bb<\/em><br \/>\n&#8211;> ah\u00ed\u00ad que te va<br \/>\n<em>expect \u00abPassword:\u00bb<\/em><br \/>\n&#8211;> el password<br \/>\n<em>send \u00abpasswordSSHn\u00bb<\/em><br \/>\n&#8211;> lo enviamos<br \/>\n<em>expect \u00abDownload directory:\u00bb<\/em><br \/>\n&#8211;> Directorio destino<br \/>\n<em>send \u00ab\/n\u00bb<\/em><br \/>\n&#8211;> es la ra\u00ed\u00adz del Servidor (\/)<br \/>\n<em>expect \u00abadmin:\u00bb<\/em><br \/>\n&#8211;> esperamos que acabe&#8230;. bastante rato; al final nos pide otro comando<br \/>\n<em>send \u00abutils uccx recordings purge 1000 [exec date +%m\/%e\/20%y] 23:59:59n\u00bb<\/em><br \/>\n&#8211;> Ahora borramos los del d\u00ed\u00ada actual (hago la copia cada d\u00ed\u00ada)<br \/>\n<em>expect \u00abpress\u00bb<\/em><br \/>\n&#8211;> Pide que pulsemos \u00abY\u00bb<br \/>\n<em>send \u00abY\u00bb<\/em><br \/>\n&#8211;> lo pulsamos ;-P<br \/>\nexpect \u00abadmin:\u00bb<br \/>\n&#8211;> Ha acabado de borrar<br \/>\nsend \u00abquitn\u00bb<br \/>\n&#8211;> tarea finalizada \ud83d\ude42<br \/>\nexpect eof<br \/>\nEnjoy the script<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta semana he tenido que realizar un script para copiar las grabaciones de un callmanager de cisco por ssh y volcarlas en un servidor, por SSH. Los requisitos: 1\u00ba) conectarme por SSH al CCM 2\u00ba) Ejecutar unas instrucciones y esperar respuesta del CCM 3\u00ba) Eliminar las grabaciones, una vez pasadas al servidor Nos ponemos manos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5],"tags":[45,58,73,102,168,179],"class_list":["post-339","post","type-post","status-publish","format-standard","hentry","category-cisco","category-linux","tag-cisco-call-manager","tag-debian","tag-expect","tag-linux-2","tag-scripts","tag-ssh"],"_links":{"self":[{"href":"https:\/\/diablo.craem.net\/index.php?rest_route=\/wp\/v2\/posts\/339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/diablo.craem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/diablo.craem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/diablo.craem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/diablo.craem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=339"}],"version-history":[{"count":0,"href":"https:\/\/diablo.craem.net\/index.php?rest_route=\/wp\/v2\/posts\/339\/revisions"}],"wp:attachment":[{"href":"https:\/\/diablo.craem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/diablo.craem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/diablo.craem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}