O comando Linux: ssh funciona fora do script bash, mas não dentro do script?

0

Estou com problemas com o seguinte comando:

echo "Pass for router:"
read -s pass

/usr/bin/expect - << EXPCT
spawn ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt
#echo @pass
expect -timeout 10000 "password: "
send -- "$pass\n";
expect "#"
interact
EXPCT

isso retorna:

Pass for router:
spawn ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt
[email protected]'s password: 
ash: opkg list-installed: not found
spawn_id: spawn id exp6 not open
    while executing
"interact"

problema é que quando eu uso um manual:

ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt

funciona sem falhas. Alguns outros pontos:

'opkg list-installed' > list-installed.txt

fazendo isso dessa maneira, execute o comando opkg list-installed na máquina REMOTE e salve o resultado na máquina LOCAL. é a única maneira que funciona assim. Se eu fizer o login com o SSH e, em seguida, tentar fazer esse comando, não funcionará, ou se funcionar, ele salvará no caminho remoto.

    
por FernandoSBS 17.11.2013 / 19:05

3 respostas

0

Para algo assim, você deve tentar Passagem SSH ou usando chaves SSH. Isso resolveria seu problema com o esperado (que é como um martelo para esse tipo de coisa).

Dessa forma, você apenas emite seu comando ssh padrão:

sshpass -p $pass ssh [email protected] 'opkg list-installed' > list-installed.txt
    
por 17.11.2013 / 19:41
0

tente desta forma, firdt connect, em seguida, execute o comando no remoto. não direto passar o elogio na conexão.

echo "Pass for router:"
read -s pass

/usr/bin/expect - << EXPCT
spawn ssh 192.168.10.1 -l root
opkg list-installed > list-installed.txt
#echo @pass
expect -timeout 10000 "password: "
send -- "$pass\n";
expect "#"
interact
EXPCT
    
por 17.11.2013 / 19:37
0

Algo que me morde de novo e de novo: deixando a opção -n desativada no ssh durante o loop de uma lista de nomes de host no stdin

sshopts="-o StrictHostKeyChecking=no -o ConnectTimeout=5 "
sshopts+=" -n" # keep it from swallowing stdin

while read remotehostname; do
    sshpass [...] ssh ${sshopts} [...]
done < ${HOSTFILE}

[Insira o editorial padrão sobre porque o sshpass é inerentemente inseguro, a menos que você solicite interativamente a variável SSHPASS e todos os administradores de sistema competentes atinjam um hissy fit até que suas diretrizes de segurança locais permitam acesso sem senha via chaves ssh.]

    
por 20.08.2015 / 03:40

Tags