Как скопировать файлы с виртуальной машины на локальную?

3

У меня есть виртуальная машина в Virtualbox с Ubuntu 15.04 (только интерфейс командной строки), и я хочу скопировать файлы с виртуальной машины на хост. Поскольку у меня есть только CLI, я не могу использовать общие папки.

Я попытался получить доступ к своему USB-накопителю из Virtualbox, но это не помогло (пришлось подключать жесткий диск после подключения к Windows).

Есть ли способ скопировать файлы из Ubuntu 15.04 (виртуальная машина) на Windows 7 или USB-накопитель?


Мой ответ: я отметил один ответ как хороший, но мне удалось решить мою проблему до этого. Я создал две программы на Python. один файл отправки, второй файл приема.

Если кому-то нужна эта программа, вот код: (в обоих смените xxx.xxx.xxx.xxx на IP fileServer)

fileServer.py (на компьютере, на который вы хотите получать файлы):

import socket
print('File server V 1.0 by vakus')
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(('xxx.xxx.xxx.xxx', 9999))
serv.listen(1)
conn, addr = serv.accept()
print('Incoming Connection. Please write password:')
pas = bytes(input(), 'UTF-8')
conpass = conn.recv(1024)
if conpass != pas:
    print('Passwords are not the same. closing connection')
    conn.sendall(bytes('Passwords are not the same.', 'UTF-8'))
    conn.close()
    exit()
else:
    print('Passwords are the same.')
    conn.sendall(bytes('Passwords are the same.', 'UTF-8'))
filename = conn.recv(1024)
file = ""
while True:
    data = conn.recv(1024)
    if not data: break
    file += data.decode('UTF-8')
    print(data.decode('UTF-8'), end='')
print('Close connection')
conn.close()
print('Creating file...')
try:
    import os
    os.mkdir('recv')
    del os
except:
    pass
f = open('recv/' + filename.decode("UTF-8"), 'w')
f.write(file)
f.close()

fileTransmiter.py (на компьютере, который отправляет файл):

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('xxx.xxx.xxx.xxx', 9999))
sock.sendall(bytes(input('Password: '), 'UTF-8'))
answer = sock.recv(1024)
print(answer)
if answer == bytes("Passwords are not the same.", 'UTF-8'):
    exit()
filename = input('File to send: ')
f = open(filename)
sock.sendall(bytes(filename, 'UTF-8'))
for x in f.readlines():
    print(x)
    sock.sendall(bytes(x, 'UTF-8'))
sock.sendall(bytes('', 'UTF-8'))
sock.close()
print('Connection closed.')
vakus
источник
Вы пытались настроить SSH-сервер на виртуальной машине и затем использовать SFTP (с клиентом, подобным FileZilla) для подключения к виртуальной машине с хост-машины?
BloodPhilia
@ up Я этого не делал, но я не хотел бы устанавливать новые пакеты (пытаясь сделать ubuntu как можно меньшего размера)
vakus
Разве SSH не установлен по умолчанию? Если это так, нет необходимости устанавливать дополнительные пакеты.
BloodPhilia
Он установлен, но я не знаю, как настроить ssh-сервер, и я не могу найти ничего, что могло бы помочь мне с этим
vakus
Добавлен ответ о том, как настроить ваш SSH сервер.
BloodPhilia

Ответы:

1

Если вы хотите использовать SSH-сервер, попробуйте следующее, чтобы настроить его. Я предполагаю, что ваша виртуальная машина не нуждается в особой безопасности, так как эти инструкции откроют входы root SSH для вашей гостевой машины. Вы можете отменить эти изменения, когда вы закончите.

Я предполагаю, что opensshсервер уже установлен.

  • Откройте ваш конфигурационный файл openssh в вашем любимом текстовом редакторе. Если вы используете, vimнапример:

    sudo vim /etc/ssh/sshd_config
    
  • Добавьте в конец или убедитесь, что строки ниже не закомментированы. Если вы используете не rootдругого пользователя, пропустите первые две строки:

    PermitRootLogin without-password
    PermitRootLogin yes
    PasswordAuthentication yes
    
  • Сохраните новый файл конфигурации.

  • Перезапустите сервер SSH:

    sudo restart ssh
    

Затем просто подключитесь к гостевой машине с помощью SFTP-клиента, такого как FileZilla. Просто введите IP-адрес, данные вашего root (или другого) пользователя в GUI и подключитесь.

BloodPhilia
источник
Спасибо за информацию о настройке ssh сервера, но у меня все еще есть еще один вопрос. Когда я пытаюсь соединиться с FilleZilla, он говорит fzSftp started, protocol_version=2и connection closed after 20 seconds of inactivity(или что-то подобное, я использую польскую версию) и пытаюсь соединиться снова. Также я не уверен, что IP является правильным. Я использовал один изarp -an
vakus
Получить IP-адрес, выполнив ifconfig из командной строки на вашем виртуальном компьютере с Ubuntu.
BloodPhilia
2

Вот как, если у вас есть FileZilla:

  1. в Quickconnectполе введите sftp://yourserverваше имя пользователя и пароль. SFTP 1
  2. Hit connect SFTP 2 Вы получите предупреждение SSH о том, что у вас нет кэшированного ключа хоста. При желании нажмитеAlways trust this host, add this key to the cache SFTP 3
  3. Загрузите эти файлы! введите описание изображения здесь
td512
источник