推送文件(expect交互式方式与sshpass非交互式方式)

前提条件

以下两种推送的文件是SSH的公钥,推送方式依赖于SSH,基于SSH的相关方面操作和机器相关配置请参考我的上一篇博文“ssh服务批量管理例子

1、expect交互式方式

1、1上传文件及文件内容

#以10机器为例。

#执行rz –y分别上传“dis-sshkey”、“expect-copy-sshkey.exp”和“iplist”,三者文件内容如下:

[[email protected] ~]$ ls -l dis-sshkey  expect-copy-sshkey.exp  iplist

-rw-r--r-- 1 oldgirl oldgirl 287 Jun  8 22:55 dis-sshkey

-rw-r--r-- 1 oldgirl oldgirl 579 Jun  8 22:55 expect-copy-sshkey.exp

-rw-r--r-- 1 oldgirl oldgirl  23 Jun 8 22:55 iplist

#dis-sshkey的内容如下:

[[email protected] ~]$ cat dis-sshkey

#!/bin/sh
. /etc/init.d/functions
[ ! -f iplist ] && echo "hostlists.txt isnot exist." && exit 1
 
for host in `cat iplist`
do
 expectexpect-copy-sshkey.exp $host &>/dev/null
 if [ $? -eq 0];then
    action "$ipdis data" /bin/true
 else
    action"$ip dis data" /bin/false
 fi
done

#expect-copy-sshkey.exp的内容如下:

[[email protected] ~]$ cat expect-copy-sshkey.exp

#!/usr/bin/expect
if { $argc != 1 } {  
 send_user"usage: expect expect-copy-sshkey.exp host \n"   
 exit   
} 
 
#define var
set host [lindex $argv 0]
set password "123456"
 
spawn ssh-copy-id -i /home/oldgirl/.ssh/id_dsa.pub"[email protected]$host"
#spawn ssh -p 50718 [email protected]$host /sbin/ifconfig 
set timeout 60
expect {
        -timeout 20
       "yes/no"    {send"yes\r";exp_continue}
       "*password" {send "$password\r"}
       timeout  {puts "expectconnect timeout,pls contact oldboy."; return}
}
expect eof
 
exit -onexit {
  send_user"Oldboy say good bye to you!\n"
}

#iplist的内容如下:

[[email protected] ~]$ cat iplist

172.16.1.7

172.16.1.9

1、2安装expect

[[email protected] ~]# rpm -qa expect

[[email protected] ~]# yum install expect -y

Loaded plugins: fastestmirror, security
Setting up Install Process
Determining fastest mirrors
 * base:centos.ustc.edu.cn
 * extras:centos.ustc.edu.cn
 * updates:centos.ustc.edu.cn
base                                                                                                        | 3.7 kB     00:00     
extras                                                                                                      | 3.4 kB     00:00     
updates                                                                                                     | 3.4 kB     00:00     
updates/primary_db                                                                                          | 729 kB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package expect.x86_64 0:5.44.1.15-5.el6_4 will beinstalled
--> Finished Dependency Resolution
 
Dependencies Resolved
 
====================================================================================================================================
 Package                      Arch                         Version                                Repository                  Size
====================================================================================================================================
Installing:
 expect                       x86_64                       5.44.1.15-5.el6_4                       base                       256 k
 
Transaction Summary
====================================================================================================================================
Install       1Package(s)
 
Total download size: 256 k
Installed size: 553 k
Downloading Packages:
expect-5.44.1.15-5.el6_4.x86_64.rpm                                                                         | 256 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing :expect-5.44.1.15-5.el6_4.x86_64                                                                                 1/1 
  Verifying  : expect-5.44.1.15-5.el6_4.x86_64                                                                                  1/1
 
Installed:
  expect.x86_640:5.44.1.15-5.el6_4                                                                                                
 
Complete!

[[email protected] ~]# rpm -qa expect

expect-5.44.1.15-5.el6_4.x86_64

[[email protected] ~]# which expect

/usr/bin/expect

1、3同步公钥操作

#先把7和9机器中已存在的公钥文件删除,不然再同步公钥的时候会失败。

[[email protected] ~]$ rm -rf ~/.ssh/

[[email protected] ~]$ rm -rf ~/.ssh/

#在10机器执行

[[email protected] ~]$ /bin/sh ~/dis-sshkey

dis data                                                 [  OK  ]

dis data                                                 [  OK  ]

#在7和9机器查看结果

[[email protected] ~]$ ls -l ~/.ssh/authorized_keys

-rw------- 1 oldgirl oldgirl 604 Jun  8 23:26 /home/oldgirl/.ssh/authorized_keys

[[email protected] ~]$ ls -l ~/.ssh/authorized_keys

-rw------- 1 oldgirl oldgirl 604 Jun  8 23:26 /home/oldgirl/.ssh/authorized_keys

2、sshpass非交互式

2、1安装sshpass

[[email protected] oldgirl]# cd /etc/yum.repos.d/

[[email protected] yum.repos.d]# ll

total 24

-rw-r--r--. 1 root root 1991 Aug  4  2015CentOS-Base.repo

-rw-r--r--. 1 root root 647 Aug  4  2015 CentOS-Debuginfo.repo

-rw-r--r--. 1 root root 289 Aug  4  2015 CentOS-fasttrack.repo

-rw-r--r--. 1 root root 630 Aug  4  2015 CentOS-Media.repo

-rw-r--r--. 1 root root 6259 Aug  4  2015CentOS-Vault.repo

[[email protected] yum.repos.d]# wgethttp://download.opensuse.org/repositories/home:/Strahlex/CentOS_CentOS-6/home:Strahlex.repo

#上述命令是在一行的。

[[email protected] yum.repos.d]# yum install sshpass

2、2操作

[[email protected] ~]$ sshpass -p 123456 ssh 172.16.1.31

#第一次操作可能没反应,可用下述参数解决

[[email protected] ~]# sshpass -p 123456 ssh -p 22 172.16.1.31 -o StrictHostKeyChecking=no

Warning: Permanently added ‘172.16.1.31‘ (RSA) to thelist of known hosts.

Last login: Fri Jun 10 15:32:52 2016 from 10.0.0.1

[[email protected] ~]# logout

[[email protected] ~]# sshpass -p 123456 ssh 172.16.1.31 -o StrictHostKeyChecking=no

Last login: Fri Jun 10 15:57:47 2016 from 172.16.1.41

[[email protected] ~]# logout

2、2、1#直接带密码连接服务器

[[email protected] ~]# sshpass -p 123456 ssh 172.16.1.31

Last login: Fri Jun 10 15:57:35 2016 from 172.16.1.41

[[email protected] ~]# logout

2、2、2#以文件形式保存密码连接服务器

[[email protected] ~]# echo "123456">ssh.passwd

[[email protected] ~]# sshpass -f ssh.passwd ssh 172.16.1.31

Last login: Fri Jun 10 16:00:06 2016 from 172.16.1.41

[[email protected] ~]# logout

Connection to 172.16.1.31 closed.

2、2、3#将密码写入变量

[[email protected] ~]# export SSHPASS="123456"

[[email protected] ~]# sshpass -e ssh 172.16.1.31

Last login: Fri Jun 10 16:05:14 2016 from 172.16.1.41

[[email protected] ~]# logout

Connection to 172.16.1.31 closed.

2、2、4#同理远程拉取、推送文件、执行命令等操作scp,rsync均可。

[[email protected] ~]# sshpass -f ssh.passwd scp /etc/hosts172.16.1.31:/root/

[[email protected] ~]# pwd

/root

[[email protected] ~]# ls -l hosts

-rw-r--r-- 1 root root 158 Jun 10 16:13 hosts

[[email protected] ~]# sshpass -f ssh.passwd ssh 172.16.1.31 ls /root/

anaconda-ks.cfg

hosts

install.log

install.log.syslog

时间: 2025-01-08 01:04:57

推送文件(expect交互式方式与sshpass非交互式方式)的相关文章

创建版本仓库并推送文件

创建版本仓库: [[email protected] ~]# mkdir /home/gitroot # 这个目录作为版本仓库 [[email protected] ~]# cd /home/gitroot/ [[email protected] gitroot]# git init # 初始化,使得这个目录变成Git可以管理的仓库 推送文件到版本仓库: [[email protected] gitroot]# cat 1.txt # 先创建一个文件,然后再把这个文件推送到版本仓库 1111 2

Git 推送文件到远程仓库

Configure Git for the first time:git config --global user.name "xxxxx xx"git config --global user.email "[email protected]" 远程仓库已创建,克隆远程仓库到本地(进入对应的文件夹进行克隆): git clone xxxxxxxxxxxx 克隆完成后,进入克隆的文件: cd  xxx 初始化本地仓库 git init 把你的项目扔进去 git st

git推送文件至github缺少README文件

一直报这个错! 主要是因为本地仓库中缺少README这个文件. 解决办法:第一步:git pull --rebase origin master 将github中的README文件下到本地仓库中. 第二步:git push -u origin master即可完成代码上传到github

linux->windows主动推送文件同步目录数据 linux-windows数据目录同步

1 .windows下安装openssh for windows工具,下载地址 https://www.mls-software.com/opensshd.html 2.修改openssh安装目录下etc/sshd_config 3.新建windows账号for ssh服务器用于登录,默认使用Administrator是不允许登录的 4.用ssh-keygen.exe -C ahwater

远程拉取,推送文件包

都是在本地终端操作~~~scp [email protected]:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/ ---- 从远程拉取到本地scp filename.tar.gz [email protected]:/home/wwwroot/ ---- 从本地复制到远程 常用到  tar -zxvf     tar -zcvf ping IP  ----可以看出ip哪些内容~~~

python Paramiko模块远程推送文件

#!/usr/bin/python import paramiko def push_file(file):     f = open(file,'r')     running = 1     while running:         line = f.readline()         if line != '':             line = line.strip('\n')             list = line.split(' ')             ip 

Expect实现批量主机公钥推送

创建脚本文件推送公钥,ping通一个,推送一个怎么去请帮忙的人?(小工)注意不要按任何一个空格,要使用tab键尽量使用变量,不要用字符串.如何查看特殊字符(隐形字符)只要公钥推送结束,expect就不需要了可能会有以下情况: expect没有装,可以编写以下脚本 没有公钥,如何判断脚本检查手动检查ssh-keygen//自带光环,不需要使用expect使用脚本批量启动kvm虚拟机 原文地址:http://blog.51cto.com/5450935/2096282

ASP.NET使用Jquery LigerUI 轮询方式配合Ajax实现消息推送

轮询是在客户端建立一个时钟,每隔一段时间对服务器发送一次请求,获取服务器数据,是实现消息推送最简单最易实现的一种方式,最大的缺点浏览器需要不断的向服务器发出请求,这样会占用很多的带宽,造成资源浪费 下面是JS代码: 1 $(document).ready(function () { 2 setInterval(invoke, 20000); 3 }); 4 function invoke() { 5 var xhr = $.ajax({ 6 type: "POST", 7 dataTy

linux下数据推送(同步)方案

相信各位小伙伴在日常的工作中,经常会遇到需要将数据定时推送到别的服务器,甚至是要实时同步的情况. 下面笔者将会介绍几种可行的方式. 一.scp+ssh-key+crontab 这种是最原始的办法,但也是最基本,最不受限制的,基本只要能ssh到对端,这种方法就是可行的.笔者曾经在项目中遇到过两端的服务器之间存在多重网络限制.折腾来折腾去,最后还是选用这种方法. 首先,如果要做到脚本推送,这中方法最大的问题就是在scp的过程中需要输入密码,这样就做不到自动化执行脚本了.技术厉害的同学用expect来