Ожидается сценарий: чтение пароля Base64 из файла

Я создал скрипт, который будет подключаться к серверу с использованием SFTP. Чтобы не вводить пароль в скрипт в виде обычного текста, я планирую поместить его в файл, закодированный в base64. Я могу читать из файла без проблем. Но я не знаю, как декодировать base64 с Expect. Итак, на данный момент скрипт читает файл и вводит пароль (напрямую) в скрипт. Как это расшифровать? Я готов переместить весь скрипт обратно в 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 ответа

Решение

Вы можете использовать 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] #
  1. Поскольку вы используете S ftp, лучший способ - использовать аутентификацию с открытым ключом. Искать "открытые ключи sftp"

  2. Вы могли бы установить tcllib пакет, затем сделать

    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]
    

Лучше убедиться, что файл auth не имеет разрешений на чтение для всего мира: base64 не совсем криптографически безопасен.

Если вы используете Tcl 8.6, встроенная поддержка base64 (включая декодирование).

set f [open "sftp_auth.cfg" r]
set password [binary decode base64 [read $f]]
close $f
Другие вопросы по тегам