zoukankan      html  css  js  c++  java
  • ssh自动登录实现方法

    问题:由于ssh协议不支持从标准输入获取变量,所以在shell脚本中无法实现自动化交互。

    解决办法一:使用sshpass,需要在有网的的情况下安装sshpass,这种方法简单易操作。

          首先安装sshpass:yum -y install sshpass

          然后自动化脚本中直接使用:sshpass -p "密码" ssh root@192.168.1.3

    解决办法二:使用expect

          expect可以启动新的进程并且可以发送信息到新的进程中执行,expect命令有很多参数使用,下面列举几个常用的,欢迎补充。

    expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 
        选项 
             -c:从命令行执行expect脚本,默认expect是交互地执行的   
                   示例:expect -c 'expect "\n" {send "pressed enter\n"}' 
             -d:输出调试信息   
                   示例:expect  -d ssh.exp
              expect中的相关命令 
                    spawn:启动新的进程 
                    send:向进程发送字符串 
                    expect:从进程接收字符串 
                    interact:允许用户交互
                    exp_continue  匹配多个字符串时在执行动作后加此命令 
    
         expect最常用的语法(tcl语言:模式-动作) 
            单一分支模式的语法: 
                   expect "hi" { send "You said hi\n" } 
             匹配到 hi 后,会输出"you said hi",并换行 多分支模式的语法: expect { "hi" { send "You said hi\n" } "hehe" { send “Hehe yourself\n" } "bye" { send "Goodbye\n" } }
             匹配 hi, hehe, bye 中的任意字符串时, 发送相应字符串。等同于:

          使用:

    copy#!/usr/bin/expect
    #!/bin/bash
    
    set user "root"
    set pass "root"
    set machine "192.168.1.3"
    #设置expect等待30秒匹配不到再返回
    set timeout 30
    
    spawn ssh "$user@$machine"
    expect {
        "password" {
            send "$pass\n" ;
            #exp_continue;
        }
    }
    expect "$user"
    send "touch /root/a.txt\n"
    expect "$user"
    send "exit\n"
    expect "$user"
    #interact
    expect eof

        

  • 相关阅读:
    vsftpd安装问题汇总(持续更新。。)
    Office2010安装问题总结
    AM335X 开发板安装vsftpd操作流程
    Source Insight常用快捷键及注释快捷键设置
    小四轴之第二次飞行篇
    linux命令df中df -h和df -i
    Linux tail 命令
    Linux chmod命令用法
    ps -ef |grep java
    jupyter notebook安装、登录
  • 原文地址:https://www.cnblogs.com/yinguojin/p/15614189.html
Copyright © 2011-2022 走看看