Shell Shell για να μεταφορτώσει ένα αρχείο στον ίδιο υποκατάλογο σε έναν απομακρυσμένο διακομιστή
Ένα πολύ κοινό καθήκον ενός προγραμματιστή ιστού είναι η μεταφόρτωση ενός μόνο αρχείου από έναν υποκατάλογο στον αναπτυξιακό σας φάκελο στον ίδιο υποκατάλογο σε έναν απομακρυσμένο διακομιστή. Δυστυχώς, αυτό πάντα καταλήγει να είναι μια ενοχλητική χειρωνακτική διαδικασία που συνεπάγεται την εναλλαγή καταλόγων και στους δύο διακομιστές, και τα απόβλητα ένα μεγάλο χρονικό διάστημα.
Έτσι, έχω πάρει από τον εαυτό μου να γράψω ένα script κελύφους για να αυτοματοποιήσει αυτό για μένα, χρησιμοποιώντας scp για την ασφαλή αντιγραφή αρχείων. (Σημαντική πλευρά Σημείωση: ftp είναι τρομακτικά ανασφαλής, χρησιμοποιήστε WinSCP αντ 'αυτού)
Το κύριο πρόβλημα για την επίλυση ήταν ότι το WordPress μου εγκατάσταση στην μηχανή ανάπτυξης μου έχει έναν διαφορετικό κατάλογο βάσης από την εγκατάσταση στον server μου. Στην μηχανή ανάπτυξης μου είναι / var / www, και στον server μου είναι κάτι περισσότερο σαν / var / www / howtogeek / docs /. Αποφάσισα να μεταφέρω αυτές τις μεταβλητές στην αρχή του σεναρίου, όπως αυτό:
[email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
Σημειώστε ότι ο τοπικός κατάλογος (LDIR) στη δέσμη ενεργειών έχει ένα \ πριν από κάθε / στην διαδρομή. Αυτό συμβαίνει επειδή πρόκειται να μεταβιβάσουμε αυτό σε μια εντολή sed αργότερα στο σενάριο, οπότε πρέπει να ξεφύγουμε από αυτές τις αξίες. Είμαι βέβαιος ότι υπάρχει κάποιος άλλος τρόπος γύρω από αυτό, αλλά δεν το γνωρίζω.
Στη συνέχεια, έχω ρυθμίσει τα αυτόματα logins ssh. Για να το κάνετε αυτό, πρέπει πρώτα να εκτελέσετε το βοηθητικό πρόγραμμα ssh keygen έτσι:
ssh-keygen -t rsa
Στη συνέχεια, πρέπει να αντιγράψετε το αρχείο ~ / .ssh / id_rsa.pub στο αρχείο ~ / .ssh / authorized_keys στον απομακρυσμένο διακομιστή. Εάν ο κατάλογος ~ / .ssh έχει ήδη δημιουργηθεί στον απομακρυσμένο διακομιστή (ίσως θέλετε να το ελέγξετε), τότε μπορείτε να εκτελέσετε αυτήν την εντολή για να αντιγράψετε τα κλειδιά:
cat ~ / .ssh / id_rsa.pub | ssh χρήστης @ hostname 'cat >> .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 / όταν εκτελέσατε την εντολή, το block sed θα απομακρύνει το / var / www με βάση τη μεταβλητή LDIR, αλλά αφήνει το / wp-content /.
Το δεύτερο μπλοκ φροντίζει ακριβώς να απογυμνώσει ολόκληρη την προηγούμενη διαδρομή από το όνομα αρχείου που πέρασε στο σενάριο, έτσι ώστε να πάρετε ακριβώς το όνομα αρχείου.
Για παράδειγμα, αν ονομάσατε το script up.sh και το εκτελέσατε από τον τοπικό κατάλογο / var / www / wp-content / plugins / σε ένα αρχείο:
up.sh myplugin.php
Αυτό θα επεκταθεί από το κέλυφος ως εξής:
scp myplugin.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 εγκατεστημένο.