zoukankan      html  css  js  c++  java
  • ssh参数中无密码选项-解决方式

    在shell脚本中向其他设备发送命令,可以通过ssh协议,ssh可以用密码方式和免密码方式。

    • 免密码方式是把本机的ssh public key上传到目标设备上;
    • 密码方式就是ssh登陆或发命令时需要交互一次让输密码的过程。

    有些情况不适合向目标设备上传public key,例如目标设备不允许上传等情况,就需要用输入密码的方式,

    但输入密码的方式又不利于shell脚本自动化,为了密码跟随到参数中一次性输入,有很多手段:

    1、

    sshpass

    https://sourceforge.net/projects/sshpass/files/sshpass/

    使用方式:

    sshpass -p "XXX" ssh user@IP  “command”

    执行多条命令用 && 即可:

    sshpass -p "XXX" ssh user@IP  “command1 && command2”

    本地脚本在目标设备上运行:

    sshpass -p password ssh -q username@password bash -s < shell_script.sh

    注:

    ssh重要的几个选项:

    -q:quiet mode,不让ssh输出各种提示信息;
    -o StrictHostKeyChecking=no:ssh的一个option,不做strict check,连接时不用再确认是否连接,不再提示输入yes/no确定是否登录;
    -t:告诉ssh,后面的命令是ssh以后,在目标机器上运行的。
     
    使用bash定义公共函数如下:
    #!/bin/bash
     
    ################################################################################
    # <USAGE>: send_cmd <ip> <port> <username> <password> <command>
    ################################################################################

    function send_cmd()

    {

      ret=`sshpass -p $4 ssh -q -o "StrictHostKeyChecking no" -p $2 $3@$1 -t "$5"`

      if [[ "${ret}" =~ "Host key verification failed" ]]; then

        rm -f ~/.ssh/known_hosts

        ret=`sshpass -p $4 ssh -q -o "StrictHostKeyChecking no" -p $2 $3@$1 -t "$5"`

      fi

      echo "${ret}"

    2、

    expect

    2.1 示例脚本:

    #!/usr/bin/expect

    spawn ssh -q username@hostname

    expect "*assword*"

    send "password "

    expect "*$*"

    send "command "

    expect "*$*"

    send "exit "

    expect eof

    2.2 expect不支持本地脚本直接在目标设备上运行,想执行则需要先拷贝到目标设备。

    2.3 expect可以应用到其他,例如scp、 ftp、等很多需要交互的命令。

    其他备注:

    ssh -q 中“-q”参数,也可以用ssh -o "StrictHostKeyChecking no" 。

    3、putty中plink工具

    putty开源源码,可以用在windows和linux,它包含很多小工具,其中plink工具很方便的直接执行命令。

    例如windows上执行:

    plink.exe -batch  -l root -pw 111111  100.2.160.200 ls 

    参数帮助请参考plink.exe --help

  • 相关阅读:
    ResponsiveSlides.js最轻量级的幻灯片插件
    jQuery.extend 函数详解
    HQL查询语言的使用介绍
    使用Hibernate命名查询
    Jquery.KinSlideshow图片轮播插件
    关于文件下载自己忽略的文件中文命名。。。
    DB2中的ROW_NUMBER() OVER()函数用法
    css ul li 水平布局问题
    彻底弄懂css中单位px和em,rem的区别 转的自己看
    taglib 自定义标签
  • 原文地址:https://www.cnblogs.com/JamesLi/p/12765242.html
Copyright © 2011-2022 走看看