sshpass+expect解决交互式问题

一、sshpass和expect安装

sshpass是一款自动为ssh填充密码的开源插件,并没有对ssh做任何修改,是从外部进行的操作。sshpass实现比较简单,但是非常易用,原理与expect类似
在rhel6.4上,没有sshpass的软件包,无法采用yum方式安装。从源码编译安装非常简单。

  1. 下载sshpass源码:
    https://sourceforge.net/projects/sshpass/
  2. 编译安装
    $ tar -zxf sshpass-1.05.tar.gz
    $ cd sshpass-1.05
    $ ./configure
    $ make && make install

expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!
expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装

  1. 下载:expect-5.43.0.tar和tcl8.4.11-src.tar
    将expect和tcl的软件包下载放到/usr/local/src目录下

  2. 解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装
    [root@xw4 src]# tar -zvxf tcl8.4.11-src.tar.gz
    [root@xw4 src]# cd tcl8.4.11/unix
    [root@xw4 unix]# ./configure
    [root@xw4 unix]# make && make install

  3. 安装expect
    [root@xw4 src]# tar -zvxf expect-5.43.0.tar.gz
    [root@xw4 src]# cd expect-5.43.0
    [root@xw4 expect-5.43.0]# ./configure --with-tclinclude=/usr/local/src/tcl8.4.11/generic --with-tclconfig=/usr/local/lib/
    [root@xw4 expect-5.43.0]# make && make install

二、expect spawn的用法

三、sshpass用法

实例1:直接远程连接某台主机:
命令:sshpass -p ‘密码’ ssh [email protected] 【默认为22端口】

实例2:远程连接指定ssh的端口:
命令:sshpass -p ‘密码’ ssh -p 1000 [email protected] (当远程主机不是默认的22端口时候)

实例3:从密码文件读取文件内容作为密码去远程连接主机
命令:sshpass -f xxx.txt ssh [email protected]

实例4:从远程主机上拉取文件到本地
命令: sshpass -p ‘123456’ scp root@host_ip:/home/test/t ./tmp/

附录:

1. ssh -o的常用选项
例:
ssh -o ConnectTimeout=3 连接超时时间,3秒
ssh -o ConnectionAttempts=5 连接失败后重试次数,5次
ssh -o PasswordAuthentication=no 不使用密码认证,没有互信直接退出
ssh -o StrictHostKeyChecking=no $ip “command” 自动信任主机并添加到known_hosts文件

2. inux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的

/usr:系统级的目录,可以理解为C:/Windows/,
/usr/lib:理解为C:/Windows/System32。
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
/opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。

那么源码究竟放哪里?
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。

参考:
https://www.cnblogs.com/kevingrace/p/5900303.html

猜你喜欢

转载自blog.csdn.net/qq_40443457/article/details/86262305
今日推荐