Como posso executar comandos no modo em lote sobre ssh? Ou seja, qual é o ssh
equivalente do comando sftp -b <filename> <hostname>
?
Eu tenho um conjunto de comandos que desejo executar em um conjunto de hosts conectados ssh
. Além disso sftp
, armazeno os comandos em um arquivo, filename
conecto ao host e executo os comandos usando o comando mencionado anteriormente.
É algo assim possível acabou ssh
?
Respostas:
Me corrija se eu estiver errado, mas você parece querer executar comandos regulares do shell no servidor remoto em que o script é local.
Eu faço isso com alguns aplicativos 'execução remota' no meu ambiente de teste usando Python em vez do shell:
ssh $userhost python < $pythonscriptfilename
.fonte
O equivalente SSH de
sftp -b <filename> <hostname>
seria:ssh -o BatchMode=yes <hostname> sh -s < "<filename>"
fonte
Que tal mantê-lo simples e executar o arquivo "lote" no outro computador?
E o arquivo em lotes seria um script de shell normal, portanto a sintaxe é bem conhecida.
fonte
man expect
? : \mas não é o caminho perfeito.
fonte
expect
foi projetado para interagir com programas que esperam estar rodando em um terminal. Isso não tem relação com o problema de executar comandos no ssh.possivelmente
fonte
Você pode usar comandos forçados ssh.
Eles estão associados a uma chave específica. Quando uma autenticação é feita com essa chave, esse comando é executado e a conexão é encerrada. Uma vantagem dessa abordagem é o aumento da segurança, pois, nesse caso, a chave não pode ser usada para acessar um shell de login.
fonte
Outra opção para um script do Arcege seria uma função Bash:
Eu não uso a
-T
opção ssh , pois ela não funciona em todos os casos.Este script usa expansão de parâmetro na matriz de parâmetros posicionais
$@
:"${@:(-1)}"
expande para o último parâmetro (literalmente, primeiro forma o fim em diante)"${#@}"
expande para o número de parâmetros posicionais"${@:1:${#@}-1}"
expande para uma lista de todos os parâmetros do primeiro ao penúltimo (literalmente número de parâmetros menos um).fonte