Ожидается сценарий: чтение пароля 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] #
Поскольку вы используете S ftp, лучший способ - использовать аутентификацию с открытым ключом. Искать "открытые ключи sftp"
Вы могли бы установить
tcllib
пакет, затем сделатьpackage require base64 set f [open sftp_auth.cfg] gets $f data close $f set pw [::base64::decode $data]
взывать к
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