É possível automatizar uma configuração de host compartilhado usando o script de shell bash?

0

Preâmbulo: Nunca criei um script de bash antes. Então, e primeiro de tudo, eu nem tenho certeza se esta é a ferramenta certa para o trabalho. Se não for, por favor, e antes de tudo, deixe-me saber o que, na sua opinião, é a melhor alternativa.

Contexto: Costumo fazer tarefas repetitivas toda vez que tento configurar um site. Desejo automatizar essas tarefas executando um ou dois comandos. UPDATE: Host compartilhado é baseado em Unix. As máquinas locais são do Mac OS X, também baseadas no Unix.

Como exemplo, aqui estão algumas das tarefas (comandos) que eu geralmente faço:

SCP:

scp ~/local/path/general_web_app/.bash_profile [email protected]:/home/HOSTNAME/.bash_profile

scp ~/local/path/general_web_app/.gitconfig [email protected]:/home/HOSTNAME/.gitconfig

SSH diretamente:

ssh [email protected] 
cd /www/www/
git init
git add .
git commit -a -m "first commit"
cd ~/private/ && mkdir repos

EDITAR, ENCONTRAR, SUBSTITUIR SALVAR E SAIR:

pico ~/remote/private/repos/general_hub.git/hooks/post-update
replace "user" WITH "hostname";
hit "cmd x"
hit "y"

AFAIK: Esses são os diferentes tipos de tarefas que desejo que o script faça.

Pergunta 1: Pode bash script manusear SCP, SSH diretamente e EDITAR ENCONTRAR SUBSTITUIR SALVAR E SAIR?

Pergunta 2: Alguns parâmetros devem ser solicitados ao usuário que executa o script, e esses parâmetros devem ser usados para serem colocados dentro de alguns arquivos (substituindo palavras-chave específicas existentes) - isso pode ser feito?

Pergunta 3: Devemos copiar os arquivos para o controle remoto e editar diretamente no controle remoto, ou, devemos pegar os arquivos localmente, "editá-los localmente em um local temporário" e, em seguida, colocá-los no servidor? Eu presumo que o segundo é muito mais complicado.

Algum exemplo que eu possa olhar?

Agradecemos antecipadamente

    
por MEM 06.12.2013 / 11:34

1 resposta

2

A resposta curta é: sim para todos.

Vou dar alguns exemplos. A seguir, um exemplo de um comando que executa um script bash local em uma máquina remota: observe que não é necessário copiá-lo remotamente:

   ssh user@remote_pc 'bash -s' < local_file.sh

Isso é tão simples que talvez não mereça escrever um script inteiro para lidar com isso, mas se você quiser fazer isso, ele também pode ser organizado por meio de um script. Para que isso funcione, você precisará configurar passwordless login para conexões ssh. Se você não fizer isso, os comandos ssh / scp dentro do script serão interrompidos enquanto aguardam a inserção da senha do usuário remoto.

Quanto à edição e assim por diante, o Unix possui o editor de fluxo final sed , que faz exatamente isso: por exemplo, o comando

 sed 's/a/A/g' old_file.txt > new_file.txt

substitui a letra minúscula a na letra maiúscula A e coloca a saída em um novo arquivo. Isso também pode ser facilmente roteirizado.

Quanto aos parâmetros, o script de shell pode ler parâmetros de um arquivo ou pode consultar o ambiente para alguns parâmetros. Não há necessidade de perguntar a um usuário seu nome de login,

  echo $USER
  whoami

fará isso, mesmo a partir do script. A mesma coisa para um endereço residencial, echo $HOME e assim por diante.

Quanto à sua terceira pergunta, espero que minha primeira resposta também forneça uma resposta: o primeiro comando permite que você execute um arquivo de script, que você editou localmente, em um servidor remoto, sem precisar copiá-lo lá.

Bem-vindo ao mundo do * Nix, onde o seu desejo é o meu comando .

Desculpe, esqueci: este comando

  export -p | more

exibirá todas as variáveis locais que estão disponíveis em todos os lugares (tecnicamente, que foram exportadas ).

    
por 06.12.2013 / 12:08