2017-12-12 3 views
0

このコードでは、.php Webページ内でホスト名、ユーザー名、パスワードを使用しています。私はその後、私のリモートPiにSSHで接続でき、textfile.txtのテキストを変更することができます。私が今必要とするのは、私の確認ウェブページに結果を表示できることです。私はsedが使用するのが正しいかどうかを理解するのに苦労していますが、これはこれまでのところです。問題sedを使用して二重引用符で囲まれた文字列をすべて見つけよう

これは私が使用しているTESTFILE.TXT例です:

Pi1Hostname = "Tester1"

Pi1Username = "EXAMPLEUSERNAME"

Pi1Password = "ExamplePassword"

これはホスト名に新しい文字列を入力する作業スクリプトです。

$ssh1->exec('sed -i \'/Pi1Hostname /s/".*."/"'. $hostnameNew .'\"/\' testfile.txt'); 

これは私が現在pi1Hostname結果を呼び出すために使用しようとしているものです:

echo '<p>Company:' . $ssh1->exec('sed -i /Pi1Hostname /\".*.\"/ testfile.txt') .'</p>'; 

これは私が取得していますエラーメッセージです:

sed: -e expression #1, char 12: unterminated address regex 

場合誰もがこの問題にいくつかのインプットを持っています。これは私のウェブページのための入力の他の19行を得るために私が把握する必要がある1つの事です。

+0

あなたは1つのコマンドラインで複数の置換を処理するためにsedをするために、複数の '-e'引数を追加することができます。 –

答えて

0

あなたのプログラムに追加する前に、sed呼び出しをテストファイルに作用させてください。私は他のプログラムにハードコードするコマンドでこれを行います。

あなたのsed呼び出しは、スペースを含む式引数を引用しません。そういうわけではないのです。

私はあなたのためにいくつかの考えを持っています。

インターネットからのフォーム入力に含まれるデータはすべてエスケープする必要があります。慎重に作られた形式でシェルにコマンドを注入することができます(これがどのようにして合うか分かりません)。また、これがhttpsで実行されていることを確認してください。あなたのペイロードには、暗号化されたくないものではなく、誰でもあなたのパイを調べる必要があるものがあるようです。その点では、あなたのpiがフィッシング詐欺スタイルの攻撃にユーザー名とパスワードを送信するのを防ぎます。

さらに、なぜシェルを使用するのですか?あなたはすでにPHPになっていますか?あなたは、pcre(正規表現の正規表現ではなくunixからの正規表現だけでなく、私の友人への嫌悪感もない)を含む正規表現を含む、一般的なプロポーザルのプログラミング言語機能にアクセスできます。ファイル全体を読み込み、PHP側で解析する方が理にかなっていませんか?

+0

これはすべてのテスト段階です。最終バージョンはすべてプライベートネットワーク上で保護され、メインPiの管理者または管理者特権を持つプライベートIPスキーム内の管理者だけがWebサイトにアクセスできます。私はそれが自動的に一連の設定を設定する5 Piに影響を与える必要があります。 – TombergE

0

見た後、私はちょっと探していた答えを見つけました:

cat testfile.txt | grep -oP 'Pi1Hostname = "\K[^"]+ 
関連する問題