使用expect scp避免直接输密码
需求:现在有一百多台的机器,都是使用用户名密码登录做一些运维操作,不想因为密码变更造成管理上的一些麻烦,所以改为通过密钥文件的方式进行登录,需要提前做一些准备工作,把准备好的。SSH文件复制到各机器的特定用户目录下。
操作:需要使用到EXPECT或者SSHPASS。这里选择EXPECT为例:
保存为 myscp.sh,替换为真正的密码,使用的时候传递目标IP参数。
#!/bin/bash expect -c " set timeout 1200; spawn /usr/bin/scp -r /home/gdmpmon/.ssh $1:/home/gdmpmon expect { \"*yes/no*\"{send \"yes\r\"; exp_continue} \"*password*\"{send \"password"\r\";} } expect eof;"
实现类似功能的PYTHON代码如下:
#!/usr/bin/python import pexpect import sys import time now = time.strftime("%m%d%y_%I%M%S%p", time.localtime()) print now foo = pexpect.spawn('scp -r /path/to/.ssh %s:/path/to//' % sys.argv[1]) foo.expect('.ssword:*') foo.sendline('password') foo.expect('.*(yes/no).*') foo.sendLine('yes') foo.expect(pexpect.EOF) finish = time.strftime("%m%d%y_%I%M%S%p", time.localtime()) print finish
Looking for a job working at Home about MSBI