2012年3月3日土曜日

リモートサーバー上の同じサブディレクトリにファイルをアップロードするシェルスクリプト

Web開発者にとって非常に一般的なタスクは、リモートサーバー上の同じサブディレクトリには、開発ボックスのサブディレクトリから単一のファイルのアップロードです。残念ながら、これは常に両方のサーバーに切り替え、ディレクトリを含む迷惑な手動のプロセスで完結、と多くの時間を浪費。

だから、私は安全なファイルのコピー用にscpを使用して、私のためにこれを自動化するシェルスクリプトを書くために自分自身によってそれを踏み出しました。 (重大な副作用の注意:FTPは恐ろしく安全ではないが、使用 WinSCP instead)

解決するための主な問題は、私の開発マシン上で私のワードプレスのインストールは私のサーバー上のインストールとは別のベースディレクトリを持っているということでした。私の開発マシン上では/ var / wwwにだ、と私のサーバーでより多くの/ var / www / howtogeekの/ docs /のようなものです。私はちょうどこのように、スクリプトの先頭で変数にそれらを移動することを決めた。

SSHSERVER=thegeek@hostname.com
RDIR=/var/www/howtogeek/docs
打ち込む='は/ var / www'に

スクリプト内のローカルディレクトリ(打ち込むの)パス内の各/の前にを持っていることに注意してください。我々は、後でスクリプトでsedコマンドにこれを渡すしようとしているためですので、それらの値をエスケープする必要があります。私はこれを回避するいくつかの他の方法があることを確認んだけど、私はそれに気づいていないです。

次に、私は自動化されたsshログインを設定します。これを行うには、最初にのようにssh keygenユーティリティを実行する必要があります。

のssh - keygen - tをRSA

次に、リモートサーバ上の〜/ .ssh / authorized_keysファイルへの〜/ .ssh / id_rsa.pubファイルをコピーする必要があります。 〜/。sshディレクトリがすでに(チェックしたいかもしれません)リモートサーバ上に作成されている場合は、その後、キーを介してコピーするには、このコマンドを実行することができます。

猫の〜/ .ssh / id_rsa.pubファイル| sshのユーザ@ホスト名"猫>> .ssh / authorized_keysに"

今はパスワードなしでscpユーティリティを使用して可能にする自動化されたsshログインを、持っている。今の我々はスクリプトで使うscpコマンドを見てみましょう:

scpの$ 1 $ SSHSERVER:$ RDIR`PWD | sed"のS / $ {打ち込む}//"`/`しますecho $ 1 | sedのの/ .* ///'`

$ 1はあなたがアップロードしようとしているファイル名をスクリプトに渡すでしょうパラメータです。 $ SSHSERVERと$ RDIRは、我々はユーザ@ホスト名と、上記のリモートパスを設定するには、スクリプトの先頭で設定してみます変数です。

PWDで始まる最初のブロック| sedは、リモートサーバーと一致しないパスの前の部分から現在のディレクトリパスとストリップがかかりますが、パスの残りの部分を残します。例えば、あなたがしていた場合は、/ var / www /のWP - コンテンツ/コマンドを実行したときに、sedのブロックは、それの/ WP -コンテンツ/部分からご打ち込むの変数に基づいて/ var / wwwにをはぎ取り、しかし残すだろう。

番目のブロックは単にあなたがファイル名だけを取得するようにスクリプトに渡されたファイル名から全体前述のパスを取り除くために確認します。

たとえば、スクリプトのup.shの名前とファイルをローカルの/ var / www /のWP - コンテンツ/プラグイン/ディレクトリからそれを実行した場合:

up.sh myplugin.php

これは、次のように、シェルによって展開されていた。

SCP myplugin.php thegeek@hostname.com:/ var / www /のhowtogeekの/ docs / WP -コンテンツ/プラグイン/ myplugin.php

代わりに記事に基づいて、独自のスクリプトファイルを作成しようとしているから、ダウンロードするために、私はそれを提供してきました。そのように動作していない特殊文字を含むすべての問題がないという...とはい、私は)=自分自身をアップロードするスクリプトを使用

ギーク- uploader.shをダウンロード

ただパスが通った場所に置いてから、お好きな名前を付けます。私はちょうど"上"に鉱山を改名、ので、私はアップロードする"までのファイル名。txt"と入力することもできます。また、それを開放し、環境に合わせて、スクリプトの先頭で変数を変更してください。

このスクリプトは、* nixシェルとscpユーティリティを使って何で動作するはずです。私がUbuntuを使用していますが、それはCygwinがインストールされているSolaris、OS X、あるいはWindows上で動作するはずです。

0 件のコメント:

コメントを投稿