2017-07-25 166 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