29Jun

Shell Shell για να φορτώσετε ένα αρχείο στον ίδιο υποκατάλογο σε έναν απομακρυσμένο διακομιστή

click fraud protection

Ένα πολύ κοινό καθήκον ενός προγραμματιστή ιστού είναι η μεταφόρτωση ενός μόνο αρχείου από έναν υποκατάλογο στον αναπτυξιακό σας φάκελο στον ίδιο υποκατάλογο σε έναν απομακρυσμένο διακομιστή.Δυστυχώς, αυτό πάντα καταλήγει να είναι μια ενοχλητική χειρωνακτική διαδικασία που συνεπάγεται την αλλαγή καταλόγων και στους δύο διακομιστές, και σπαταλάει ένα μεγάλο χρονικό διάστημα.

Έτσι, έκανα τον εαυτό μου να γράψω ένα σενάριο κελύφους για να αυτοματοποιήσω αυτό για μένα, χρησιμοποιώντας scp για ασφαλή αντιγραφή αρχείων.(Σημαντική πλευρά Σημείωση: ftp είναι τρομακτικά ανασφαλής, χρησιμοποιήστε WinSCP αντ 'αυτού)

Το κύριο πρόβλημα που πρέπει να λυθεί ήταν ότι το WordPress μου εγκατάσταση στην μηχανή ανάπτυξης μου έχει ένα διαφορετικό βασικό κατάλογο από την εγκατάσταση στον server μου.Στην μηχανή ανάπτυξης μου είναι /var/ www, και στον server μου είναι κάτι περισσότερο σαν /var/www/howtogeek/docs/.Αποφάσισα να μετακινήσετε αυτές σε μεταβλητές στην αρχή του σεναρίου, όπως αυτό:

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

instagram viewer

Σημειώστε ότι ο τοπικός κατάλογος( LDIR) στο σενάριο έχει ένα \ πριν από κάθε / στη διαδρομή.Αυτό συμβαίνει επειδή πρόκειται να περάσουμε αυτό σε μια εντολή sed αργότερα στο σενάριο, οπότε πρέπει να ξεφύγουμε από αυτές τις αξίες.Είμαι βέβαιος ότι υπάρχει κάποιος άλλος τρόπος γύρω από αυτό, αλλά δεν το γνωρίζω.

Έπειτα, εγκατέστησα αυτόματα τα logins ssh.Για να το κάνετε αυτό, πρέπει πρώτα να εκτελέσετε το βοηθητικό πρόγραμμα ssh keygen έτσι:

ssh-keygen -t rsa

Στη συνέχεια, πρέπει να αντιγράψετε το αρχείο ~ /.ssh/ id_rsa.pub στο αρχείο ~ /.ssh/ authorized_keys στον απομακρυσμένο διακομιστή.Εάν ο κατάλογος ~ /. ssh έχει ήδη δημιουργηθεί στον απομακρυσμένο διακομιστή( ίσως θέλετε να το ελέγξετε), τότε μπορείτε να εκτελέσετε αυτήν την εντολή για να αντιγράψετε τα κλειδιά:

cat ~ /.ssh/ id_rsa.pub |ssh user @ hostname 'cat & gt; & gt;.ssh / authorized_keys '

Τώρα έχουμε αυτόματες συνδέσεις ssh, οι οποίες θα επιτρέψουν τη χρήση του βοηθητικού προγράμματος scp χωρίς κωδικό πρόσβασης.Ας ρίξουμε μια ματιά στη εντολή scp που θα χρησιμοποιήσουμε στο script:

scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed "s / ${ LDIR} //" `/ echo $ 1 | sed 's /.* \ /// ''

Το $ 1 είναι η παράμετρος που θα μεταβιβάσετε στη δέσμη ενεργειών για το όνομα αρχείου που προσπαθείτε να μεταφορτώσετε.$ SSHSERVER και $ RDIR είναι μεταβλητές που θα ορίσουμε στην αρχή της δέσμης ενεργειών για να ορίσετε το όνομα χρήστη του host @ και την προηγούμενη απομακρυσμένη διαδρομή.

Το πρώτο μπλοκ που ξεκινά με το pwd | sed παίρνει την τρέχουσα διαδρομή καταλόγου και απομακρύνεται από το προηγούμενο τμήμα της διαδρομής που δεν ταιριάζει με τον απομακρυσμένο διακομιστή, αλλά αφήνει το υπόλοιπο της διαδρομής.Για παράδειγμα, αν χρησιμοποιούσατε /var/www/ wp-content / όταν εκτελέσατε την εντολή, το sed block θα λυγίζει το www /var/ www με βάση τη μεταβλητή LDIR, αλλά αφήνει το / wp-content / μέρος του.

Το δεύτερο μπλοκ φροντίζει να απογυμνώσει ολόκληρη την προηγούμενη διαδρομή από το όνομα αρχείου που πέρασε στο σενάριο, έτσι ώστε να πάρετε ακριβώς το όνομα αρχείου.

Για παράδειγμα, εάν ονομάσατε το script up.sh και το εκτελέσατε από τον τοπικό σας κατάλογο /var/www/ wp-/plugins/ σε ένα αρχείο:

up.sh myplugin.php

Αυτό θα επεκταθεί από το κέλυφος ως εξής:

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

Αντί να προσπαθήσετε να δημιουργήσετε το δικό σας αρχείο σεναρίου βασισμένο στο άρθρο, το έχω δώσει για να το κατεβάσετε.Με αυτόν τον τρόπο δεν θα υπάρξουν προβλήματα με ειδικούς χαρακτήρες που δεν δουλεύουν. .. και ναι, χρησιμοποίησα το σενάριο για να ανεβάσω τον εαυτό μου =)

Κατεβάστε το geek-uploader.sh

Απλά το βάλτε κάπου στο δρόμο σας και ονομάστε ό, τι θέλετε.Μου μετονομάστηκε σε "up", οπότε μπορώ να πληκτρολογήσω "up file.txt" για να μεταφορτωθεί.Θυμηθείτε επίσης να το ανοίξετε και να αλλάξετε τις μεταβλητές στην αρχή του σεναρίου ώστε να ταιριάζει με το περιβάλλον σας.

Αυτό το σενάριο θα πρέπει να λειτουργεί σε οτιδήποτε έχει το κέλυφος * nix και το βοηθητικό πρόγραμμα scp.Χρησιμοποιώ το Ubuntu, αλλά θα πρέπει να λειτουργήσει σε Solaris, OS X, ή ακόμα και σε Windows με Cygwin εγκατεστημένο.