Usando o expect para inserir comandos

0

Heres o fio que eu estou saltando de: Entrada de entrada em um comando?

Estou tentando executar este comando: cd /etc/openvpn/easy-rsa; . ./vars; ./build-key username

No entanto, depois de executar esse comando, não preciso inserir nada [apenas pressione enter] 10 vezes e pressione y duas vezes. O usuário no último tópico sugeriu que eu use, exceto, mas eu não consegui fazê-lo funcionar. Aqui estão as perguntas que ele faz:

root@suffice-vpn:/etc/openvpn/easy-rsa# ./build-key usernamtest
Generating a 2048 bit RSA private key
..................+++
........+++
writing new private key to 'usernamtest.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [NY]:
Locality Name (eg, city) [Merrick]:
Organization Name (eg, company) [IceWare]:
Organizational Unit Name (eg, section) [IceWare]:
Common Name (eg, your name or your server's hostname) [usernamtest]:
Name [server]:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'NY'
localityName          :PRINTABLE:'Merrick'
organizationName      :PRINTABLE:'IceWare'
organizationalUnitName:PRINTABLE:'IceWare'
commonName            :PRINTABLE:'usernamtest'
name                  :PRINTABLE:'server'
emailAddress          :IA5STRING:'[email protected]'
Certificate is to be certified until Jan 14 18:27:48 2026 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y

Como você pode ver, pressione enter 8 vezes inicialmente [para manter a entrada padrão] e depois pressione enter 2 vezes para pular os comandos opcionais. Então, preciso pressionar y duas vezes. Como posso automatizar isso? Eu preciso que tudo isso aconteça em um comando. Alguma sugestão? Agradecemos antecipadamente.

    
por Justin G 17.01.2016 / 19:30

2 respostas

1

Aqui está um script de expectativa que você pode tentar (não posso testá-lo sozinho, já que não estou usando o openvpn em nenhum lugar):

#!/usr/bin/expect

set timeout 20
set username [lindex $argv 0]

spawn ./build-key $username

while 1 { 
  expect { 
    "y/n]" { send "y\r" }
    "]:" { send "\r" }
    eof { break } 
  } 
}

Ele basicamente envia y sempre que vê uma pergunta y/n] e apenas uma nova linha sempre que vê qualquer outro colchete de fechamento ] , até ficar sem entrada.

Você pode salvá-lo como whatever , torná-lo executável e, em seguida, executar

./whatever usernametest
    
por steeldriver 17.01.2016 / 22:59
1

Eu encontrei uma alternativa mais fácil:

cd /etc/openvpn/easy-rsa; . ./vars; ./build-key --batch username
    
por Justin G 18.01.2016 / 02:39