web-dev-qa-db-ja.com

Ubuntu Server 14.04 VM FTP、SCP、またはNFSなしで)からディレクトリ(フォルダ)を取得するにはどうすればよいですか?

私は少し厄介な状況にあります。私は数か月前に現在の仕事を始めましたが、Apache Webサーバー(単純なPHPベースのサーバー)でWebアプリケーションを実行しています。アプリケーションのいくつかの問題を修正するためにこのコードを更新する必要があり、コードを適切なソースコード環境(つまりバージョン管理)に入れたいと思います。

無関係な詳細の説明をスキップして、ソフトウェアやその他のファイルをマシンに追加または削除せずに、Ubuntu Server 14.04(CLI)仮想マシンからディレクトリ(フォルダー)を取得する必要があります。現在、マシンにはFTPまたはSCPサーバーがないため、それらを使用できません。また、NFS共有のマウントを許可する/sbin/mount.nfsヘルパープログラムがありません(NFS共有をマウントできれば、ファイルを取得するために使用できる一連の共有フォルダーがここにあります)。

現在、私には1つのアイデアしかありません。それは、マシンを実行しているESXiホストにUSBフラッシュドライブを挿入し、そこにファイルをコピーすることです。ただし、本機にはUSBコントローラーが搭載されておらず、実稼働機であるため、平日はシャットダウンしてインストールすることができないため、営業時間外にしかインストールできません。このため、(TLDR:)buntuサーバー14.04からディレクトリを取得する方法について他に誰かアイデアがあるかどうか疑問に思いましたVM FTP、SCP、NFS共有のマウント、または新しいファイルやソフトウェアのインストールなし。

編集:すべての素晴らしい反応を期待していませんでした。今のところ私の受け入れた答えを削除します。これらの回答を確認して実験する機会があれば、他の場所に割り当てます。

4
Brandon S.

持っていないことをすべて言うだけでなく、持っていることを言うのはどうですか?フォルダの大きさと空きディスク容量はどれくらいですか?

コンソールからでもCLIにまったくアクセスできないと仮定します。

  1. ESXi 5.0以降で、サーバーにVMware Toolsがインストールされている場合は、PowerCLIと Copy-VMGuestFile コマンドレットを使用してサーバーからファイルをコピーします。
  2. これはVMであり、分離された場所にバックアップを復元し、起動して、ファイルで取得したいすべての変更を加えます。
  3. これはVMであり、ディスクのバックアップを復元し、VMDKファイルをダウンロードしてマウントします。

SSHアクセスがない場合でも、コマンドを入力し、VMコンソールを介してサーバーを管理するための何らかのアクセスがあると仮定します。

  1. これはWebサーバーです。ブラウザからファイルをダウンロードしてください
    1. たぶん、Apache構成の変更を避けるために、それらを/ tmp(メモリ)にgzip圧縮し、シンボリックリンクをWebサーバーフォルダーに圧縮します
  2. FTPクライアントがインストールされていますか?サーバーから別の場所にFTPで転送し、ファイルをアップロードします。

    1. SSHクライアントがインストールされていますか?それらをサーバーからリモートSSHサーバーにSCPします
    2. それらを自分宛てにメールで送信
    3. WGET/Curl POSTそれらをリモートWebサーバーにアップロード
    4. それらをTFTP出力します
  3. Netcat(nc)がインストールされていますか? tar | ncをパイプ処理してデータをソケットにストリーミングし、ネットワーク上の別のコンピューターでnc | tarを使用して受信することができます。

  4. 典型的なLinuxインストールの場合、Python、Pythonには SimpleHTTPServer モジュールが付属しており、デフォルトで現在のサービスを提供します。 Webサイトとしてディレクトリを作成し、メインWebサーバーとは別のポートで実行して、そこからファイルをダウンロードします。
  5. それらをバイナリブロブとしてメモリ内のテーブルにデータベースに詰め込み、クライアントからそれらを選択するスクリプト おそらく関連性があります
  6. サーバーはリモートの宛先にsyslogを送信しますか? Base64はファイルをエンコードし、syslogにストリーミングします... ymmvを読み戻します。
37

サーバーにPythonがインストールされている場合-ほぼ確実にインストールされます; Pythonは、存在することがほぼ保証されている十分なシステムサービスによって使用されています-次のコマンドを使用して、HTTPサーバーを起動し、現在のディレクトリからファイルを提供できます。

python -m SimpleHTTPServer 9999

ポート9999でWebサーバーを起動します。

このサーバーにはアクセス制御がないため、サーバーが一般にアクセス可能である場合は、これを実行したくない場合があることに注意してください。


もう1つのオプションは、tarアーカイブをネットワーク経由でパイプすることです。 Ubuntuサーバーから到達可能なIPアドレス1.2.3.4に別のコンピューター(ホスト名 "client")があるとすると、クライアントで次のコマンドを実行することでこれを行うことができます。

nc -lp 9999 > files.tar.gz

ホスト上で実行中:

tar cz /path/to/directory > /dev/tcp/1.2.3.4/9999

これによりアーカイブが作成されますが、アーカイブがディスクに書き込まれることはなく、ネットワークを介して直接ストリーミングされるため、ディスク領域が不足するリスクはありません。

9

仮想マシンディスクは、定期的にバックアップされる方法で保存されることが望ましいので、バックアップを新しい場所に復元してから、VMディスクを新しいVMの2番目のディスクとして使用できます。

公式のバックアップがない場合はあるはずであり、これには並べ替えが必要ですが、ディスクがLVMパーティションに保存されている場合は、スナップショットパーティションを作成し、そこからディスクをコピーすることができる場合があります。バックアップ

6
Michael Shaw

さて、すでに受け入れられている答えがあり、さらに、それがWebサーバーであるという事実を利用した本当に良い答えがあります。

しかし、私があまり対処していないと思う攻撃の行を指摘するだけで、コマンドラインにアクセスできる場合は、おそらくターミナルプログラムを使用しており、それらのほとんどは、スクロールオフするものをログに記録する何らかの方法を持っていますスクリーン。

したがって、この回答は、将来、Webサーバーを実行していない人に役立つ可能性があります。基本的に、一般的なLinuxツールを使用したフィールド便宜的なファイル転送と呼ばれるもの

フォルダをASCIIとして送信できます。フォルダをtarし、バイナリからASCIIに変換します。いくつかの可能性を使用します。次に、termanプログラムを実行しているマシンで、スクロールバックからASCII blob、そこからバイナリを抽出します。

tar czf - folderpath | uuencode temp.tar.gz

または

tar cvf - folderpath | base64

巨大なテキストブロックを端末にダンプします。それをスクロールバックとしてキャプチャし、テキストエディタで少しクリーンアップしてから、バイナリにデコードして戻すことができる場合は、フォルダのtar.gzがあります。確かに、PuTTYのスクロールを大量の行に戻すようなことをしなければならないかもしれません。

必要に応じて、xxdを使用してエンコードとデコードを行うこともできると思います。

一度にスクロールバックに収めることができなかった場合は、headtailを使用して分割し、ASCIIをチャンクに送信することもできます。時間。

詳細は、アクセスできるユーティリティと、コンソールデータストリームを介してそのデータを圧縮するために必要な労力によって異なります。

(OPはWebサーバーを使用する必要があります)

5
infixed

それがESXiである間、VM別のvmdiskを接続する必要があります。次に、重要でないすべてのものをそのディスクに移動し、選択したツール(ssh/scp/rsync /その他)をインストールします。

4
Kondybas

サーバーでシェルコマンドを実行できる場合は、適切な引数を指定してtarを実行し、ファイルを含む.tar(または.tar.gz)アーカイブを作成してから、 curlまたはwgetを実行して、アーカイブを https://transfer.sh/ にアップロードできます。別のコンピューターからアーカイブを取得できます。

サーバーでシェルコマンドを実行できない場合は、サーバーのsysadminまたはDBAにコマンドの実行方法を尋ねる必要があります。 (サーバーは重要なデータベースを実行しているため、メンテナンスタスクを実行する方法が必要であるとおっしゃいました。)

.phpファイルをアップロードして実行(つまり、Webページを提供)できる場合は、ディレクトリツリーを公開するadmin .phpスクリプトを見つけてアップロードし、実行することができます。

3
pts

別のホストから、次の手順を実行します。

 dd if=/dev/zero of=some-file.img bs=1k count=1000
 mkfs.fat some-file.img

デスクトップ上のファイルsome-file.imgを取得します。 VMwareクライアントは、フロッピードライブとしてマウントできる必要があります。

  • 調整count=1000あなたのニーズに合うように。
3
Archemar

データストアに新しいVmdkを作成します。実行時にVMにアタッチし、VMで検出し、パーティションを作成し、ファイルシステムを作成し、マウントポイントにマウントしてから、データをコピーします。完了したら、マウントを解除し、Vmdkを切断してから、ssh/sftp/nfsにアクセスできるVM)に接続します。次に、必要に応じて検出、マウント、コピーします。

2
yetdot