Expect脚本:从文件中读取Base64密码

时间:2017-07-25 09:58:52

标签: linux base64 tcl expect

我创建了一个使用SFTP连接到服务器的脚本。 为避免将密码作为纯文本放入脚本中,我计划将其放入base64编码的文件中。 我可以从文件中读取没问题。但我不知道如何使用Expect解码base64。 因此,目前,脚本会读取文件并将密码(直接)放入脚本中。怎么解码呢? 我已准备好将所有脚本移回Shell / bash,如果这样做的话很好。

谢谢。这是代码:

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

spawn sftp myUser@111.111.111.111
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

3 个答案:

答案 0 :(得分:2)

  1. 由于您使用 S 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]
    
  4. 更好地确保auth文件没有世界可读的权限:base64不完全是加密安全的。

答案 1 :(得分: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] #

答案 2 :(得分:0)

如果您使用的是Tcl 8.6,则内置了base64支持(包括解码)。

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