O comando ssh
pode receber um comando para ser executado no servidor remoto. Quando não é dado nenhum comando para executar, ele inicia um shell interativo. Use ssh
para executar os comandos que você gostaria de executar. Por exemplo:
#!/bin/sh
while read server; do
ssh "user@$server" sh -c '
adduser -disabled-password --gecos "a user account" -home /home/foobar foobar -q
mkdir /home/foobar/.ssh
chmod -R 700 /home/foobar/.ssh/
chown -R soc /home/foobar/'
done <server_list.txt
Este é obviamente um código não testado. Para poder executar mais de um comando, iniciamos um shell filho usando sh -c
e fornecemos a esse shell uma lista de comandos para execução.
Seu comando "pára" porque ele se conecta ao servidor (na verdade, para user@bastionserver
, mas não sei como esse servidor está relacionado aos servidores listados no arquivo de entrada) e inicia um shell interativo. Seu script não continuará até que este shell interativo seja encerrado.
O resto do seu código apenas gera strings para o terminal. Não os executa.
Não tente colocar comandos em variáveis. Muito raramente funciona como esperado. Veja por exemplo " Como podemos executar um comando armazenado em uma variável? ".
Se isso fosse uma tarefa real para mim, provavelmente tentaria fazê-lo usando algo como Ansible . Infelizmente, eu não conheço a Ansible o suficiente para dar uma solução completa com segurança aqui.