ssh参数中无密码选项-解决方式

Posted JamesLi_1119401255

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\\n"

expect "*$*"

send "command\\n"

expect "*$*"

send "exit\\n"

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

 

以上是关于ssh参数中无密码选项-解决方式的主要内容,如果未能解决你的问题,请参考以下文章

我可以跳过 Firebase 中无密码登录方法的第一步吗?

ssh 的参数 -o + 检查是否是无密码访问

配置ssh无密码登录时,ssh localhost登陆本机时输入密码错误,显示permission denied,怎么解决?

解决ssh配置无密码登陆后再次出现请求输入密码的情况

SSH无密码登录

ssh localhost 配置免密登陆仍需要密码的解决方法