Executa um script de espera local em um servidor remoto?

0

Portanto, estou tentando basicamente fazer ssh em um servidor e executar um script de espera local. Tentei seguir algo semelhante a como você faria um comando bash, ou seja,

    ssh -A user@remote "bash -s" < ./script "arg1" "arg2"

Eu fiz isso no formato disso para o meu script de espera:

    ssh -A user@remote "expect" < ./script "arg1" "arg2"

Mas continuo recebendo o erro de:

    couldn't read file "arg1": No such file or directory.

Suponho que ele esteja tentando ler meu primeiro argumento como um arquivo e tentei remediar isso observando este post: Como posso executar o script local na máquina remota e incluir argumentos? No entanto, nenhuma dessas soluções está funcionando para mim. Qual poderia ser o problema?

Obrigado

    
por AAlred 23.01.2018 / 22:30

2 respostas

1

expect parece estar realmente tentando ler o primeiro argumento como se fosse um arquivo, mesmo que se use - para esse espaço. Uma solução alternativa parece ser dar /dev/stdin como nome do arquivo para expect .

$ printf 'puts [lindex $argv 1]' | ssh host 'expect /dev/stdin one two'
two
$ 
    
por 23.01.2018 / 22:45
1

A maneira mais fácil é scp do script de espera para a máquina remota e executá-lo lá. Isso evita todos os tipos de problemas de cotação e descrição de arquivos e escopo variável (e mais) que realmente atrapalharão seu dia e desperdiçam seu tempo.

Uma alternativa melhor é reescrever seu script de espera como um script perl (a Net :: SSH O módulo CPAN é perfeito para esse trabalho. Há também um módulo CPAN Esperar mais genérico) ou como um script python usando um de vários métodos ssh disponíveis ou Pexpect .

IMO, se você ainda não é especialista nas linguagens expect ou tcl , aprender uma ferramenta com foco limitado como expect é uma perda de tempo que poderia ser mais proveitosamente gasto aprendendo ou aprimorando sua habilidade com uma ferramenta / linguagem genericamente útil.

    
por 24.01.2018 / 03:29