Я нахожусь в довольно сложной ситуации. Я начал свою текущую работу несколько месяцев назад, и у меня есть веб-приложение, работающее на веб-сервере apache (простом на основе PHP). Мне нужно обновить этот код, чтобы исправить некоторые проблемы в приложении, и я хотел бы поместить код в надлежащую среду исходного кода (IE. Контроль версий).
Пропуская объяснение нерелевантных деталей, мне нужно получить каталог (папку) с виртуальной машины Ubuntu Server 14.04 (CLI). без добавления или удаления какого-либо программного обеспечения или других файлов на машине. В настоящее время на машине нет FTP или SCP сервера, поэтому я не могу их использовать. И отсутствует вспомогательная программа /sbin/mount.nfs, позволяющая монтировать общий ресурс NFS (у нас здесь есть ряд общих папок, которые я потенциально мог бы использовать для извлечения файлов, если бы мог смонтировать общий ресурс NFS).
В настоящее время у меня есть только одна идея - вставить USB-флешку в хост ESXi, на котором запущен компьютер, и скопировать на него файлы. Однако на машине нет контроллера USB, и, поскольку это производственная машина, я не могу выключить ее в течение рабочего дня, чтобы установить ее, поэтому я смогу сделать это только в нерабочее время. Из-за этого, (TL; DR :) Мне было интересно, есть ли у кого-нибудь еще какие-либо идеи о том, как получить каталог с виртуальной машины Ubuntu Server 14.04 без FTP, SCP, монтирования общего ресурса NFS или установки каких-либо новых файлов или программного обеспечения.
Изменить: не ожидал всех хороших отзывов. Удаление моего принятого ответа на данный момент. Я назначу его где-нибудь еще, когда у меня будет хороший шанс пройти эти ответы и поэкспериментировать.
Как насчет того, чтобы сказать то, чего у него нет, а также то, что у него есть? Насколько велика папка и сколько свободного места на диске?
Предполагая, что у вас вообще нет доступа к CLI, даже с консоли:
Даже если у вас нет доступа по SSH, при условии, что у вас есть какой-то доступ для ввода команд и управления сервером через консоль виртуальной машины:
Установлен ли FTP-клиент? FTP с сервера куда-нибудь и загрузите файлы.
POST
их на удаленный веб-сервер загрузитьЕсть ли у него netcat (nc
) установлены? Вы можете трубить tar | nc
и передать данные в сокет и использовать nc | tar
на другом компьютере в сети, чтобы получить. пример
Если на сервере установлен Python - что почти наверняка есть; Python используется достаточным количеством системных служб, поэтому его присутствие практически гарантировано - вы можете запустить HTTP-сервер для обслуживания файлов из текущего каталога, используя команду:
python -m SimpleHTTPServer 9999
для запуска веб-сервера на порту 9999.
Имейте в виду, что на этом сервере нет элементов управления доступом, поэтому вы можете не захотеть этого делать, если сервер доступен для всех.
Другой вариант - передать tar-архив по сети. Предполагая, что у вас есть другой компьютер (имя хоста «client») с IP-адресом 1.2.3.4, доступный с сервера Ubuntu, вы можете сделать это, выполнив следующую команду на клиенте:
nc -lp 9999 > files.tar.gz
и работает на хосте:
tar cz /path/to/directory > /dev/tcp/1.2.3.4/9999
Хотя при этом создается архив, архив никогда не записывается на диск - он передается напрямую по сети, поэтому нет риска исчерпать дисковое пространство.
Мы надеемся, что диск виртуальной машины хранится с регулярным резервным копированием, поэтому вы можете восстановить резервную копию в новом месте, а затем использовать диск виртуальной машины в качестве второго диска в новой виртуальной машине.
Если официальных резервных копий нет, то они должны быть, и это требует сортировки, но если диск хранится в разделе LVM, вы можете создать раздел моментального снимка, а затем скопировать диск оттуда, как если бы он был резервное копирование
Что ж, уже есть принятый ответ, и, кроме того, есть действительно хороший ответ, использующий тот факт, что это веб-сервер.
Но просто чтобы указать на линию атаки, которая, как мне кажется, не особо решена, - это если у вас есть доступ к командной строке, вы, вероятно, используете программу терминала, и у большинства из них есть какой-то способ регистрировать материал, который прокручивается с экран.
Так что, возможно, этот ответ может помочь в будущем тем, у кого нет запущенного веб-сервера. В основном то, что можно назвать удобной передачей файлов с использованием обычных инструментов Linux.
Можно отправить папку как ASCII. Зарезервируйте папку, преобразуйте ее из двоичного кода в ASCII, используя ряд возможностей. Затем на машине, на которой выполняется программа terman, восстановите двоичный объект ASCII из обратной прокрутки и извлеките из него двоичный файл.
tar czf - folderpath | uuencode temp.tar.gz
или
tar cvf - folderpath | base64
сбросит на ваш терминал огромный блок текста. Если вы можете записать это как прокрутку, немного очистить его в текстовом редакторе, а затем декодировать обратно в двоичный файл, у вас будет tar.gz
папки. Конечно, вам, возможно, придется сделать что-то вроде возврата прокрутки в putty
к огромному количеству строк.
Я думаю, ты мог бы даже использовать xxd
для кодирования и декодирования, если хотите.
Если вы не смогли поместить его в прокрутку за один раз, вы можете даже разбить его, используя head
и tail
и отправляйте ASCII по частям за раз.
Детали зависят от того, к каким утилитам у вас есть доступ и сколько усилий вы хотите приложить для сжатия этих данных через поток данных консоли.
(OP должен использовать веб-сервер)
Пока это виртуальная машина ESXi, вам необходимо подключить к ней еще один виртуальный диск. Затем переместите все некритичное на этот диск и установите инструмент по вашему выбору - ssh / scp / rsync / все остальное.
Если вы можете запускать команды оболочки на сервере, вы можете запустить tar
с правильными аргументами для создания .tar
(или .tar.gz
) архив, содержащий файлы, а затем вы можете запустить curl
или wget
загрузить архив в https://transfer.sh/ . С другого компьютера вы можете получить архив.
Если вы не можете запускать команды оболочки на сервере, вам следует спросить системного администратора или администратора базы данных сервера, как они запускают команды. (Вы упомянули, что на сервере работает важная база данных, поэтому должен быть способ запускать задачи обслуживания.)
Если вы можете загрузить .php
файлы и заставить их работать (т.е. обслуживать веб-страницы), тогда вы можете найти администратора .php
скрипт, который открывает дерево каталогов, загружает его и запускает.
С другого хоста выполните:
dd if=/dev/zero of=some-file.img bs=1k count=1000
mkfs.fat some-file.img
Возьмите на рабочий стол файл some-file.img. Клиент VMware должен иметь возможность монтировать его как дисковод для гибких дисков.
count=1000
чтобы соответствовать вашим потребностям.Создайте новый Vmdk в хранилище данных. Прикрепите его к виртуальной машине во время выполнения, обнаружите ее на виртуальной машине, разделите ее, создайте на ней файловую систему, смонтируйте ее в точке монтирования и затем скопируйте данные на нее. После этого размонтируйте его, отключите Vmdk, а затем подключитесь к виртуальной машине, на которой у вас есть доступ ssh / sftp / nfs. Затем найдите, смонтируйте и скопируйте куда угодно.