ssh sshpass随笔

Posted yjt1993

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssh sshpass随笔相关的知识,希望对你有一定的参考价值。

1: 当通过ssh连接远程服务器的时候,可能会出现以下繁琐场景,需要手工输入yes:

ssh [email protected]

技术分享图片

 这对于某些分布式集群来说是不行的,甚至导致集群都不能启动成功,对于像pssh,pscp这样的自动化工具来说,也不希望这一步的验证,如何在连接的时候不提示这个信息呢:

方法1、ssh -o "StrictHostKeyChecking no" [email protected]
方法2:修改/etc/ssh/ssh_config,在文件最后添加 StrictHostKeyChecking no,接着重启ssh服务

2:远程执行服务器上面的命令可以通过sshpass(当集群机器之间没有免密的时候),如果没有安装,,执行  yum install sshpass -y

用法:

[[email protected] ~]# sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file        -----指定一个文件,从文件中读取密码
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)   ----命令行直接输入密码,不安全
   -e            Password is passed as env-var "SSHPASS"         -----通过设置环境变量SSHPASS来保存密码
   With no parameters - password will be taken from stdin

   -P prompt     Which string should sshpass search for to detect a password prompt
   -v            Be verbose about what you‘re doing
   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

Eg:

(1)使用 -f

[[email protected] ~]# sshpass -f passwd.txt ssh [email protected] "free -m"
              total        used        free      shared  buff/cache   available
Mem:          96405       27169       12563        4066       56672       63775
Swap:           126          19         107

(2)使用 -p 

[[email protected] ~]# sshpass -p "mypasswd" ssh [email protected] "free -m"   
              total        used        free      shared  buff/cache   available
Mem:          96405       27168       12584        4066       56652       63777
Swap:           126          19         107  

注:生产环境不要使用这种方式,不安全

(3)使用 -e

[[email protected] ~]# export SSHPASS="mypasswd"
[[email protected] ~]# echo $SSHPASS
mypasswd
[[email protected] ~]# sshpass -e ssh [email protected] "free -m"
              total        used        free      shared  buff/cache   available
Mem:          96405       27209       12561        4066       56634       63735
Swap:           126          19         107  

当然,这种方式只针对当前shell有用,如果要配置永久生效,请修改/etc/profile文件

(4)sshpass、ssh都支持多命令调用,只要在命令之间使用&&号就行。

[[email protected] ~]# sshpass -e ssh -l root -o ‘StrictHostKeyChecking no‘ 192.168.4.50  ls /home && free -m
hadoop
mysql
yjt
zbc
              total        used        free      shared  buff/cache   available
Mem:            977         364          95          49         518         366
Swap:          4095          35        4060

  

3、如果想要远程机器调用本地脚本,那么可以如下实现

(1)ssh方式

[[email protected] ~]# ssh -l root -o ‘StrictHostKeyChecking no‘ 192.168.4.50 bash -s < test46.sh 
runstone.com

(2)sshpass方式

[[email protected] ~]# sshpass -e ssh -l root -o ‘StrictHostKeyChecking no‘ 192.168.4.50 bash -s < test46.sh
runstone.com

4、支持sudo

      有些命令需要权限才行,当不想重复输入密码的时候,可以通过这种方式。

(1)格式:cmd ---> ‘echo password | sudo -S cmd‘

         eg:

[[email protected] ~]# sshpass -p 123456 ssh  -o ‘StrictHostKeyChecking no‘ [email protected]  ‘echo 123456 | sudo -S  mkdir /backup‘

  注:-S的意思是从标准输入读取密码

      对于echo,dd等命令,可能会出现权限不够问题,如:

[[email protected] ~]# sshpass -p 123456 ssh  -o ‘StrictHostKeyChecking no‘ [email protected]  ‘echo 123456 | sudo -S  echo hello > /backup/file‘
bash: /backup/file: Permission denied

       对于上述方式,解决办法如下:

(2)格式:cmd ---> ‘echo password | sudo -S  sh/bash -c "cmd"‘

         eg:

[email protected] ~]# sshpass -p 123456 ssh  -o ‘StrictHostKeyChecking no‘ [email protected]  ‘echo 123456 | sudo -S bash -c "echo hello > /backup/file"‘

  

  

 


以上是关于ssh sshpass随笔的主要内容,如果未能解决你的问题,请参考以下文章

使用sshpass和ssh实现无密码自动远程登录

ssh密钥分发之二:使用sshpass配合ssh-kopy-id编写脚本批量分发密钥:

ssh 携带密码登录-sshpass

sshpass 使Linux可以明文参数输入SSH密码

利用sshpass命令实现ssh登录自动填写密码

sshpass: 用于非交互的ssh 密码验证