envia da variável em #! / usr / bin / expect -f

2

Estou jogando overthewire.org/wargames/bandit1. Eu tenho o arquivo de senha readme de bandit0, mas eu não quero digitar a senha de 32 caracteres para acessar o ssh para bandit 1. Eu gostaria de automatizar a entrega de senha.

Eu baixei o arquivo de senha e usei nano para adicionar "pass=" ao início da string. Então, a partir disso, posso fazer isso:

root@system:~/# source /root/Downloads/readme; export pass; echo $pass
<passwordText>

Então eu escrevi esse script com base em outra pergunta feita aqui (resposta 2 no link )

#!/usr/bin/expect -f
spawn ssh [email protected] -p 2220 -l bandit1
expect "assword:"
send $pass
interact

Em seguida, salvei e chmod u + x o arquivo de script e, em seguida, executei. A saída diz que não é possível ler a variável:

password: can't read "pass": no such variable
while executing
"send $pass"
(file "./bandit1" line 4)

Eu sei que tem algo a ver com o cabeçalho, porque este script corretamente ecoa a senha da variável

#!/usr/bin/env bash
export pass=""
source /root/Downloads/readme
export pass
echo $pass

Mas estou com dificuldades para encontrar informações sobre cabeçalhos de script básicos específicos. Alguém pode me ajudar a esclarecer isso?

    
por Brandon 13.12.2017 / 06:04

1 resposta

0

$pass como usado no script expect é uma variável TCL que não tem nada a ver com variáveis shell ou sua infeliz sobreposição com as strings passadas como o ambiente (veja a página environ(7) man). No TCL, o ambiente pode ser acessado através da variável env (veja a página tclvars(n) man). Então,

$ cat envtest
#!/usr/bin/env expect
puts $env(pass)
set pass $env(pass)
puts $pass
$ chmod +x envtest
$ export pass=Hunter2
$ ./envtest
Hunter2
Hunter2
$ 

Portanto, seu código expect pode ser escrito como

#!/usr/bin/expect -f
spawn ssh [email protected] -p 2220 -l bandit1
expect "assword:"
send $env(pass)
interact

para acessar diretamente a string de ambiente pass (bem, uma delas, de qualquer forma, já que não há muito que impedir que variáveis de ambiente duplicadas sejam criadas ...)

Há também um monte de outras maneiras de lidar com senhas em expect que não envolvem o problema do ambiente (que pode ser passado para processos filhos e lidos por eles ...).

    
por 13.12.2017 / 16:16