scp 在腳本中使用輸入密碼的解決方法

之前用腳本scp文件時,都是以.ssh打通爲基礎的。sql

可是在腳本中使用scp在機器之間拷貝文件,輸入密碼成爲問題。ssh


第一種方法,用到了expect。spa


腳本以下:ip


#! /usr/bin/expect -f it

spawn scp 1 koven@192.168.0.2: 自動化

expect "*password:" test

send "your password\r"基礎


expect eof 循環


固然不僅是scp,其它命令也能夠用expect自動化 rsa


循環處理: 

spawn scp 1 koven@192.168.0.2: 

for { set i 1 } {$i<500} {incr i} { 

expect {"*password:" {send "koven\r"} 

"*(yes/no)*" {send "yes\r"} 

注意大括號之間有空格 。



第二種方法,使用密鑰文件。




這裏假設主機A(192.168.100.3)用來獲到主機B(192.168.100.4)的文件。


在主機A上執行以下命令來生成配對密鑰:

ssh-keygen -t rsa


遇到提示回車默認便可,公鑰被存到用戶目錄下.ssh目錄,好比root存放在:


/root/.ssh/id_rsa.pub


將 .ssh 目錄中的 id_rsa.pub 文件複製到 主機B 的 ~/.ssh/ 目錄中,並更名爲 authorized_keys,

到主機A中執行命令和主機B創建信任,例(假設主機B的IP爲:192.168.100.4):


scp ~/.ssh/id_rsa.pub 192.168.100.4:/root/.ssh/authorized_keys


下面就能夠用scp、ssh命令不須要密碼來獲取主機B的文件了

ssh 192.168.100.4 回車就不須要密碼了。


注:其實id_rsa.pub內容添加到對方機器的authorized_keys中就好了。


-----------------------------------------------------------------------------------------------------


#!/usr/bin/expect -f


set password 密碼


spawn scp 用戶名@目標機器ip:拷貝文件的路徑 存放本地文件的路徑 

set timeout 300 

expect "用戶名@目標機器ip's password:" #注意:這裏的「用戶名@目標機器ip」 跟上面的一致

set timeout 300 

send "$password\r"

set timeout 300 

send "exit\r"


expect eof


附:scp參數

-r:拷貝目錄

-c:容許壓縮


一個完整的例子


#!/usr/bin/expect -f

set password 123456

#download

spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/

set timeout 300 

expect "root@192.168.1.218's password:"

set timeout 300 

send "$password\r"

set timeout 300 

send "exit\r"

expect eof 


#upload

spawn scp /home/yangyz/abc.sql root@192.168.1.218:/root/test.sql 

set timeout 300 

expect "root@192.168.1.218's password:"

set timeout 300 

send "$password\r"

set timeout 300 

send "exit\r"

expect eof




########

PS:須要先安裝expect

相關文章
相關標籤/搜索