Pergunta
Eu tenho um script que se conecta a um servidor usando ssh
. Enquanto em um loop, ele não consegue se conectar ao servidor segundo após a conexão com o primeiro. Eu acho que eu tenho que sair desse servidor para voltar para o script de chamada. Como faço para sair da sessão ssh?
while read dbname myip
do
ssh root@$myip "mysqldump - some command " | mysql -hhost -u -p myLocalDatabase > /dev/null 2>&1
done << iplist
db1 111.111.111.111
xyz 222.222.222.222
iplist
Solução
redirecionamento stdin para / dev / null
while read -r dbname myip
do
0</dev/null ssh ...... <whatever> .........
done < "iplist"
Outras dicas
Em um nível ligeiramente superior de abstração, você pode estar interessado em, por exemplo Chef :
Chef é um framework de integração de sistemas, construídos para levar os benefícios do gerenciamento de configuração para toda a sua infra-estrutura. Com Chef, você pode:
- Gerencie seus servidores escrevendo código, não executando comandos. (Via Cookbooks)
- Integrar firmemente com suas aplicações, bancos de dados, diretórios LDAP, e muito mais. (Via Bibliotecas)
- aplicações configurar facilmente que requerem conhecimento sobre toda a sua infra-estrutura ( "Que sistemas estão executando o meu pedido?" "O ??que é o servidor de banco de dados mestre atual?")
Se você quiser emitir o mesmo comando em vários hosts SSH, você pode usar DSH :
DSH é uma implementação de um invólucro para a execução de shell remoto múltipla (rsh / remsh / ssh) comandos.
Se você não tem espaço em branco nas linhas de arquivo "dbname", você pode usar isto:
for myip in $(cat dbname); do
...
done
(ou o uso de tecido: http://docs.fabfile.org/en/latest/)