如何将文件从虚拟机复制到本地机器?

如何将文件从虚拟机复制到本地机器?

我在 Virtualbox 上有一个装有 Ubuntu 15.04(仅命令行界面)的虚拟机,我想将文件从虚拟机复制到主机。由于我只有 CLI,因此无法使用共享文件夹。

我曾尝试从 Virtualbox 访问我的 USB 驱动器,但没有帮助(连接到 Windows 后我必须格式化硬盘驱动器)。

有没有办法将文件从 Ubuntu 15.04(虚拟机)复制到 Windows 7 或 USB 驱动器?


我的答案:我将一个答案标记为好,但我设法解决了之前的问题。我创建了两个 python 程序。一个发送文件,第二个接收文件。

如果有人需要这个程序,这里有代码:(将 xxx.xxx.xxx.xxx 更改为文件服务器的 IP)

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.')

答案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
    

然后只需使用 FileZilla 等 SFTP 客户端连接到您的客户机即可。只需在 GUI 中输入 IP 地址、根用户(或其他)的详细信息并连接即可。

答案2

如果您有 FileZilla,操作方法如下:

  1. Quickconnect框中输入sftp://yourserver您的用户名和密码。 SFTP 1
  2. 点击连接 SFTP 2 您将收到一条 SSH 警告,指出您没有缓存该主机密钥。 也可以单击Always trust this host, add this key to the cache SFTP 3
  3. 下载这些文件! 在此处输入图片描述

相关内容