需求:現在有一百多台的機器,都是使用用戶名密碼登錄做一些運維操作,不想因為密碼變更造成管理上的一些麻煩,所以改為通過密鑰文件的方式進行登錄,需要提前做一些准備工作,把准備好的。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
