como usar esperar com bash

2

Eu criei um script de shell como dado abaixo.Este script fará login em um servidor remoto como um usuário normal e, em seguida, alternará para o usuário root para criar um diretório.O script é fornecido abaixo.

  

ssh -t [email protected] '
  su root -c "
   echo \ "Dar nome do diretório: \";
   ler dir;
   mkdir \ $ dir;
  ";
  '

Aqui, o script perguntará a senha para o usuário normal primeiro.Então, novamente, ele solicitará a senha do root.Como eu poderia automatizar isso usando o comando expect .Quero fornecer a senha automaticamente apenas para o usuário raiz.Eu acho que pode ser feito com expect .

Por favor me ajude.

    
por Uvais Ibrahim 19.03.2013 / 11:22

3 respostas

2

Uma maneira melhor / mais fácil do que usar o expect é SSHPASS, que envia uma senha por meio de uma solicitação SSH:

sshpass -p <PASSWORD> ssh <USER>@<SERVER> <SSH Command>

PASSWORD é a senha a ser inserida quando solicitado, USER é o nome de usuário, SERVER é o endereço IP do servidor (por exemplo, 10.8.100.100) e SSH Command é o comando que você deseja executar.

Para o seu exemplo:

sshpass -p <PASSWORD> ssh [email protected] mkdir <full path for new dir>

Para instalar o SSHPASS

sudo apt-get install sshpass

Se você está querendo que a sessão SSH permaneça depois que você espera que um uso ocorra com o seguinte,

#!/bin/bash
##Enter Username and Password Details:
userName=<UserName>
password=<Password>

expect -c "
    spawn ssh ${useName}@10.8.100.100 ##put your own IP here
    expect "password: " ##or whatever password prompt you get
    send "$password\r"
    epxect -re "Last Login: " ##or whatever the end of your welcome message is
    send "su -i"
    expect "password for <UserName>"
    send "$password\r"
"

Isso deixará o acesso root logado, no entanto, até que o script envie uma declaração de retorno, ele manterá o controle até você pressionar "ctrl-c". Mas isso deve responder sua pergunta

    
por tim 21.12.2015 / 15:12
1

Se você quiser passar apenas a senha do root, você precisa

  • configure um login sem senha na conta do usuário, por exemplo, usando autenticação de chave pública e um agente ssh no lado do cliente,
  • ou configure o servidor (por exemplo, para permitir login como root e, em seguida, faça ssh -t [email protected]
por MvG 19.03.2013 / 12:37
0

Eu não vejo uma resposta aceita anos depois, então também adicionarei algo que possa ser útil para outras pessoas. Minha situação não tinha nada a ver com o SSH, mas usar o spawn espera da seguinte maneira que eu pude fazê-lo funcionar.

expect -c "  
  spawn myProc
  expect \"Do you wish to continue with XYZ? (y/N)\" {
    send \"n\r\"
    exp_continue
  }          
"

Espero que isso ajude.

    
por Relic 15.11.2017 / 01:57