Como enviar pressionamentos de teclas antes do shell interativo para automatizar o login da porta serial do Linux com a tela GNU?

4

Muitas vezes eu tenho que entrar em devboards Linux com nomes de usuário fixos conhecidos e senha através da porta serial.

Os comandos normais são:

screen /dev/ttyS0 115200

e, em seguida, dentro de screen , a sessão se parece com:

<enter>
somehost login: root<enter>
Password: root<enter>
user@host#

Como automatizar esse procedimento de login para que eu não precise digitar o nome de usuário e a senha toda vez?

Eu também posso usar expect , se necessário. Eu tentei:

expect -c "spawn screen /dev/ttyS${1:-0} ${2:-115200}; send "\r"; expect \"* login: \"; send \"root\"; expect \"Password: \"; send \"root\"; interact"

mas minhas habilidades de expect não são suficientes e isso é interrompido.

Além disso, se eu fizer login e login imediatamente, na segunda vez, ele não pedirá a senha e acessará diretamente o prompt:

user@host#

esperamos que o roteiro também leve isso em conta. Veja também: link

Pergunta semelhante para o SSH: link

    

1 resposta

5

Você pode ajudar a depurar expect adicionando a opção -d . Em seu exemplo, você veria que está fazendo "...send "\r"..." , que é avaliado pelo shell como ...send r... porque \r está sozinho fora da cota dupla. Tente alterar isso para send \"\r\" , como nos outros casos. Você também precisa colocar um retorno de carro semelhante no final de cada envio: send \"root\r\" .

Seria mais fácil escrever um arquivo de script de shell pequeno ou usar aspas simples, convertendo para doublequotes para o ${1:-0} que precisa ser interpolado:

expect -c 'spawn screen /dev/ttyS'"${1:-0} ${2:-115200}"'; send \r; expect " login: ";...'

Este script completo (sem usar o shell) também lida com o caso já registrado:

#!/bin/expect --
set tty 0
set baud 115200
if { $argc >= 1 } {
 set tty [lindex $argv 0]
}
if { $argc >= 2 } {
 set baud [lindex $argv 1]
}
spawn screen /dev/ttyS$tty $baud
send \r
expect {
      "login: " {
           send root\r
           expect "Password: "
           send root\r
       }
       "#" 
    }
interact
    
por 15.07.2017 / 09:52