zoukankan      html  css  js  c++  java
  • ssh-copy-id自动应答脚本

    参考链接:https://www.cnblogs.com/f-ck-need-u/p/7542210.html

         https://www.cnblogs.com/lzrabbit/p/4298794.html

          https://www.cnblogs.com/yihr/p/7652616.html

          https://blog.csdn.net/chenbogger/article/details/103199234(这个是我想要的)

    以下是摘抄

    expect基础

    在使用expect时,基本上都是和以下四个命令打交道:

    命令作用说明
    send 用于向进程发送字符串 命令接收一个字符串参数,并将该参数发送到进程
    expect 从进程接收字符串 命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令
    spawn 启动新的进程 spawn后的send和expect命令都是和使用spawn打开的进程进行交互
    interact 允许用户交互 主要用于退出自动化,进入人工交互

    expect脚本我们这里只使用了expect 和 send,expect意味着出现的提示信息,send就可以书写正常的linux命令,具体看例子。具体书写还是要靠大家自己调试,基本框架都是我这个例子里面。

    这个例子是bash脚本和expect脚本相结合

     1 #! /bin/bash     
     2 # bash脚本的标志
     3 
     4 /usr/bin/expect <<EOF                    
     5 # 这里意味着bash脚本中嵌套着expect脚本
     6 set timeout -1    
     7 # 设置超时时间,-1意思是永远也不超时
     8 spawn ssh root@192.168.1.15 
     9 # 意味着远程登录到我这个应用的数据库服务器
    10 
    11 expect {
    12     "*(yes/no)*" {
    13          send "yes
    "
    14          expect "passwd:"
    15          send "Pandora!74
    "
    16     }
    17     "*password:" {
    18         send "Pandora!74
    "
    19     }
    20 }
    21 # 第一次远程登录别的服务器的时候会出现一些
    22 # 提示,你可以在你自己的应用上ssh +IP尝试一下,我这里  
    23 # 会出现(yes/no),接着会让我输入密码。第二次登录就是  
    24 # 直接提示输入密码。所以这里是‘或’关系中嵌套  
    25 # 着‘与’关系。根据{}的组合来进行理解
    26 
    27 expect "*#"
    28 # expect是出现的提示信息,不同的系统不一样,你的可能是 “*$”,这里是正则表达式的匹配用法
    29 send "ps -ef | grep oracle
    "
    30 # send是输入的命令
    31 expect "*oracle*oraclehrdb"
    32 send "exit
    "
    33 # 退出远程的数据库服务器,回到本地应用服务器
    34 expect "*#"
    35 spawn ssh root@192.168.20.217        
    36 # 远程登录到另一台应用服务器,启动这个应用服务器上面的启动脚本
    37 
    38 expect {
    39     "*(yes/no)*" {
    40         send "yes
    "
    41         expect "asswd:"
    42         send "Pandora!74
    "
    43     }
    44     "*password:" {
    45         send "Pandora!74
    "
    46     }
    47 }
    48 
    49 expect "*#"
    50 send "cd /opt/jboss-eap-6.2
    "
    51 expect "*#"
    52 send "sh zidong.sh
    "
    53 expect "*#"
    54 send "exit
    "
    55 expect eof
    56 EOF                          
    57 # 退出expect脚本
    58 
    59 #最终启动自己的Jboss
    60 ps -ef | grep jboss | grep -v grep | cut -c 9-15 | xargs kill -s 9
    61 
    62 rm -rf /opt/jboss6/jboss-eap-6.2/standalone/tmp/*
    63 
    64 nohup /opt/jboss6/jboss-eap-6.2/bin/standalone.sh  -Djboss.bind.address=0.0.0.0 -Dorg.jboss.as.logging.per-deployment=false  & >> /opt/jboss6/nohup.out
     

    这样最终你就可以实现只在一个服务器上写一个启动脚本,远程登录到其他的应用服务器,启动那个应用上的脚本。我这里只是远程登录了两个,你可以按照例子远程多个。

    注意事项:
    1、这个脚本一定要放到和Jboss的启动脚本一个路径,否则就会出现不能够执行的状况,因为获取不到JBOSS的变量。

    2、我们的应用的启动脚本都会有一句tail –f nohup.out ,把启动日志放到前台,我们这里不需要放到前台,因为放到前台会有很多的日志信息,看起来很乱,因此不需要加这个语句,只需要让JBOSS自己在后台运行就可以。因此你可以自己再另写一个启动JBOSS的脚本。

    3、我这里只是我系统的例子,因为我已经吧所有的oracle设置为开机启动了,因此这里只需要查看一下oracle的状态就可以,也可以不查看,加入开机启动即可。

    4、最好把自己系统上的一些其余的软件都设置为开机启动,或者写到我们这脚本里面也可以

  • 相关阅读:
    常见试题
    Makefile学习笔记
    安装java
    IntelliJ IDEA for mac 快捷键
    JPA--Caused by: javax.persistence.PersistenceException: [PersistenceUnit: mysqlJPA] Unable to configure EntityManagerFactory
    log4j 配置
    Numbers
    mac 命令
    Intellij IDEA for mac 快捷键
    vim命令
  • 原文地址:https://www.cnblogs.com/yoyoma0355/p/14313633.html
Copyright © 2011-2022 走看看