2017-07-25 163 views
0

我已經創建了一個腳本,它將使用SFTP連接到服務器。 爲了避免將密碼作爲純文本輸入到腳本中,我打算將它放在一個以base64編碼的文件中。 我可以從文件中讀取沒有問題。但我不知道如何用Expect解碼base64。 因此,目前,腳本讀取文件並將密碼(直接)放入腳本中。如何解碼它? 如果有一種很好的方法來做這樣的事情,我已經準備好將所有腳本移回Shell/bash。Expect腳本:從文件中讀取Base64密碼

謝謝。下面的代碼:

#!/usr/bin/expect 
set myPassword [open "sftp_auth.cfg" r] 
set data [read $myPassword] 

spawn sftp [email protected] 
expect "*assword:" 
send "$data\n" 
expect "sftp>" 
send "cd /repository\n" 
expect "sftp>" 
send "get Example.sh /home/User/Example2.sh\n" 
expect "sftp>" 
send "exit\n" 
interact 
+0

爲那些尋求如何從文件中的一個期望腳本讀取用戶名和密碼:https://開頭WWW。 linuxquestions.org/questions/programming-9/expect-read-passphrase-from-a-file-287216/ – lesmana

回答

1

您可以使用Tcl的exec命令解碼密碼。例如:

[STEP 101] # cat foo.exp 
set base64_passwd UGFzc3cwcmQ= 
set passwd [exec echo $base64_passwd | base64 -d] 
puts $passwd 
[STEP 102] # expect foo.exp 
Passw0rd 
[STEP 103] # 
+0

由於編碼後的密碼已經存在於一個文件中,讓base64讀取該文件:'set passwd [exec base64 -d sftp_auth .cfg]' –

+0

是的,你是對的。 – pynexj

+0

謝謝。這正是我所期待的。 – user52713

2
  1. 由於您使用小號 FTP,最好的方法是使用公鑰認證。搜索 「SFTP公鑰」

  2. 你可以安裝the tcllib package,然後做

    package require base64 
    set f [open sftp_auth.cfg] 
    gets $f data 
    close $f 
    set pw [::base64::decode $data] 
    
  3. 叫出base64

    set pw [exec base64 -d sftp_auth.cfg] 
    

最好確保權威性文件沒有世界可讀的權限:base64不完全是密碼安全的。

+2

是的,我知道base64。無論如何,我正在計劃向團隊建議使用公鑰/私鑰身份驗證。 謝謝 – user52713

+0

有時在文件系統上以明文形式存儲密碼是最簡單的解決方案,如果您可以忍受明顯缺乏安全性。在這裏,混淆密碼實在沒有意義,特別是因爲期望腳本也是純文本,並且「解密」方法在那裏。 –

+1

是的,我完全知道這一點,感謝您指出。我會深入研究這個主題,看看我能做些什麼。 – user52713

0

如果您使用的Tcl 8.6,BASE64支持(包括解碼)建在

set f [open "sftp_auth.cfg" r] 
set password [binary decode base64 [read $f]] 
close $f