Script de Shell para carregar um arquivo no mesmo subdiretório em um servidor remoto

Script de Shell para carregar um arquivo no mesmo subdiretório em um servidor remoto
Script de Shell para carregar um arquivo no mesmo subdiretório em um servidor remoto

Vídeo: Script de Shell para carregar um arquivo no mesmo subdiretório em um servidor remoto

Vídeo: Script de Shell para carregar um arquivo no mesmo subdiretório em um servidor remoto
Vídeo: Como Habilitar o Hibernar do Windows - YouTube 2024, Maio
Anonim

Uma tarefa muito comum para um desenvolvedor da Web é fazer o upload de um único arquivo de um subdiretório em sua caixa de desenvolvimento para o mesmo subdiretório em um servidor remoto. Infelizmente, isso sempre acaba sendo um processo manual irritante que envolve a troca de diretórios em ambos os servidores e desperdiça uma grande quantidade de tempo.

Então, eu decidi escrever um script de shell para automatizar isso para mim, usando o scp para cópia segura de arquivos. (Importante Nota Lateral: o ftp é terrivelmente inseguro, use o WinSCP)

O principal problema a resolver foi que minha instalação do WordPress na minha máquina de desenvolvimento tem um diretório base diferente da instalação no meu servidor. Na minha máquina de desenvolvimento, é / var / www, e no meu servidor é algo mais como / var / www / howtogeek / docs /. Eu decidi apenas movê-los para variáveis no início do script, assim:

[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’

Observe que o diretório local (LDIR) no script tem um antes de cada / no caminho. Isso é porque vamos passar isso para um comando sed mais tarde no script, então temos que escapar desses valores. Tenho certeza de que há outra maneira de contornar isso, mas não tenho consciência disso.

Em seguida, eu configuro logins ssh automatizados. Para fazer isso, você precisa primeiro executar o utilitário ssh keygen da seguinte forma:

ssh-keygen -t rsa

Então você precisa copiar o arquivo ~ /.ssh / id_rsa.pub para o arquivo ~ /.ssh / authorized_keys no servidor remoto. Se o diretório ~ /.ssh já estiver criado no servidor remoto (talvez queira verificar), você poderá executar este comando para copiar as chaves:

cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >>.ssh/authorized_keys’

Agora temos logins ssh automatizados, que permitem usar o utilitário scp sem uma senha. Agora vamos dar uma olhada no comando scp que usaremos no script:

scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`

O $ 1 é o parâmetro que você passará para o script do nome do arquivo que você está tentando enviar. $ SSHSERVER e $ RDIR são variáveis que definiremos no início do script para definir o usuário @ hostname e o caminho remoto anterior.

O primeiro bloco que começa com pwd | sed toma o caminho do diretório atual e retira a parte anterior do caminho que não corresponde ao servidor remoto, mas deixa o restante do caminho. Por exemplo, se você estivesse em / var / www / wp-content / quando você executasse o comando, o bloco sed removeria o / var / www com base em nossa variável LDIR, mas deixaria o / wp-content / part dele.

O segundo bloco apenas tira todo o caminho anterior do nome do arquivo passado para o script, então você apenas obtém o nome do arquivo.

Por exemplo, se você nomeou o script up.sh e o executou do diretório local / var / www / wp-content / plugins / em um arquivo:

up.sh myplugin.php

Isso teria sido expandido pelo shell como o seguinte:

scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php

Em vez de tentar criar seu próprio arquivo de script com base no artigo, enviei para você fazer o download. Dessa forma, não haverá problemas com caracteres especiais que não funcionam … e sim, usei o script para fazer o upload em si =)

Download geek-uploader.sh

Basta colocá-lo em algum lugar no seu caminho e nomeie o que você quiser. Eu mudei o meu para apenas "up", então eu posso simplesmente digitar "up filename.txt" para fazer o upload. Lembre-se também de abri-lo e alterar as variáveis no início do script para corresponder ao seu ambiente.

Este script deve funcionar em qualquer coisa com um shell * nix e o utilitário scp. Estou usando o Ubuntu, mas ele deve funcionar no Solaris, no OS X ou mesmo no Windows com o Cygwin instalado.

Recomendado: