29Jun
Un compito molto comune per uno sviluppatore web è il caricamento di un singolo file da una sottodirectory nella casella di sviluppo nella stessa sottodirectory su un server remoto. Sfortunatamente, questo finisce sempre per essere un fastidioso processo manuale che coinvolge il cambio di directory su entrambi i server e spreca una grande quantità di tempo.
Quindi, ho deciso di scrivere uno script di shell per automatizzarlo, utilizzando scp per la copia di file sicura.(Nota importante: ftp è orribilmente insicuro, usa invece WinSCP)
Il problema principale da risolvere era che la mia installazione di WordPress sul mio computer di sviluppo ha una directory di base diversa dall'installazione sul mio server. Sulla mia macchina di sviluppo è /var/ www, e sul mio server è qualcosa di più come /var/www/howtogeek/docs/.Ho deciso di spostarli in variabili all'inizio dello script, in questo modo:
[email protected]
RDIR = /var/www/howtogeek/ docs
LDIR = '\ / var \ / www'
Si noti che la directory locale( LDIR) nello script ha un \ prima di ogni / nel percorso. Questo perché passeremo questo comando in un comando sed in seguito nella sceneggiatura, quindi dobbiamo sfuggire a questi valori. Sono sicuro che ci sia un altro modo per aggirare questo, ma io non ne sono consapevole.
Successivamente, ho configurato gli accessi ssh automatici. Per fare ciò, è necessario prima eseguire l'utilità keygen di ssh in questo modo:
ssh-keygen -t rsa
Quindi è necessario copiare il file ~ /.ssh/ id_rsa.pub in ~ file /.ssh/ authorized_keys sul server remoto. Se la directory ~ /. ssh è già stata creata sul server remoto( potrebbe essere necessario controllare), è possibile eseguire questo comando per copiare le chiavi su:
cat ~ /.ssh/ id_rsa.pub |ssh user @ hostname 'cat & gt; & gt;.ssh / authorized_keys '
Ora abbiamo ssh login automatici, che abiliteranno l'utilizzo dell'utilità scp senza password. Ora diamo un'occhiata al comando scp che useremo nello script:
scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed "s / ${ LDIR} //" `/` echo $ 1 | sed 's /.* \ /// '`
$ 1 è il parametro che passerai allo script per il nome del file che stai tentando di caricare.$ SSHSERVER e $ RDIR sono variabili che imposteremo all'inizio dello script per impostare user @ hostname e il percorso remoto precedente.
Il primo blocco che inizia con pwd | sed prende il percorso della directory corrente e rimuove la parte precedente del percorso che non corrisponde al server remoto, ma lascia il resto del percorso. Per esempio, se eri in /var/www/ wp-content / quando avevi eseguito il comando, il blocco sed si sarebbe tolto dal www /var/ basato sulla nostra variabile LDIR, ma lascerebbe il / wp-content / parte di esso.
Il secondo blocco si limita a rimuovere l'intero percorso precedente dal nome del file passato allo script in modo da ottenere il nome file.
Ad esempio, se hai chiamato lo script up.sh e lo hai eseguito dalla directory /plugins/ del tuo wp-content /var/www/ locale su un file:
up.sh myplugin.php
Questo sarebbe stato espanso dalla shell come la seguente:
scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-content /plugins/ myplugin.php
Invece di provare a creare il tuo file di script in base all'articolo, l'ho fornito per il download. In questo modo non ci saranno problemi con caratteri speciali che non funzionano. .. e sì, ho usato lo script per caricarlo =)
Scarica geek-uploader.sh
Mettilo da qualche parte nel tuo percorso e chiamalo come vuoi. Ho cambiato il nome del mio in "solo", quindi posso semplicemente digitare "up filename.txt" per caricare. Ricorda inoltre di aprirlo e modificare le variabili all'inizio dello script in modo che corrispondano al tuo ambiente.
Questo script dovrebbe funzionare su qualsiasi cosa con una shell * nix e l'utility scp. Sto usando Ubuntu, ma dovrebbe funzionare su Solaris, OS X o anche su Windows con Cygwin installato.