使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM