Làm cách nào để SSH tới khách VirtualBox bên ngoài thông qua máy chủ? [đóng cửa]


644

Tôi có một máy ảo Ubuntu chạy trên máy Windows 7 của mình. Làm cách nào để thiết lập nó để tôi có thể truy cập máy chủ web bên ngoài thông qua SSH?

Tôi đã tìm thấy các bước ( Thiết lập quyền truy cập SSH giữa VirtualBox Host và Guest VM ) để có thể ssh cho khách của tôi từ máy chủ của tôi, nhưng điều đó vẫn khiến tôi gặp vấn đề khi truy cập nó qua bộ định tuyến.

Tôi cho rằng tôi có thể cài đặt máy chủ SSH trên máy Windows của mình và sau đó đào hầm một vài lần (mặc dù tôi không chắc chắn 100% nên sử dụng gì về mặt cục bộ, động, v.v. hoặc cách thiết lập nhiều đường hầm?), nhưng có cách nào để làm cho VM có thể truy cập trực tiếp vào bộ định tuyến của tôi để tôi có thể chuyển trực tiếp tới nó không?


3
Có một cách dễ dàng hơn để làm điều này, bằng cách sử dụng Vagrant (tạo ra các máy ảo sẵn sàng (có thể truy cập ssh, có thể truy cập ip) từ tệp cấu hình hoặc GUI). Tôi không biết trường hợp sử dụng của bạn, nhưng tôi đã viết một hướng dẫn lớn về Cách tạo VM máy chủ Ubuntu có thể truy cập ssh bằng Vagrant , hữu ích khi bạn muốn thiết lập máy phát triển dựa trên LAMP.
Sliq

1
Vagrant là một công cụ tuyệt vời, nhưng nó không tương thích với các phiên bản mới hơn của
hộp

2
Câu trả lời hay nhất là tiếp tục xuống: stackoverflow.com/a/10410527/2214806
Michael

Bạn có thể kiểm tra hướng dẫn này wiki.workrame.com/virtualbox-ssh-b between
host

Có thể nghĩ rằng sẽ hữu ích khi có một địa điểm mới, cụ thể, nơi để nói về khu vực ảo hóa51.meta.stackexchange.com/questions/28201/ Lỗi
realtebo

Câu trả lời:


1308

Cách tốt nhất để đăng nhập vào máy ảo VirtualBox VM của khách là chuyển tiếp cổng . Theo mặc định, bạn nên có một giao diện đang sử dụng NAT . Sau đó vào phần Cài đặt mạng và nhấp vào nút Chuyển tiếp cổng . Thêm một quy tắc mới . Là tên quy tắc, chèn "ssh". Là "Cổng máy chủ", chèn 3022. Là "Cổng khách", chèn 22. Mọi thứ khác của quy tắc có thể để trống.

hoặc từ dòng lệnh

VBoxManage modifyvm myserver --natpf1 "ssh,tcp,,3022,,22"

trong đó 'myserver' là tên của VM được tạo. Kiểm tra các quy tắc được thêm vào:

VBoxManage showvminfo myserver | grep 'Rule'

Đó là tất cả! Hãy chắc chắn rằng bạn không quên cài đặt máy chủ SSH trong VM:

sudo apt-get install openssh-server

Để SSH vào máy khách VM, hãy viết:

ssh -p 3022 user@127.0.0.1

Trong trường hợp userlà tên người dùng của bạn trong VM.


24
@Keyslinger, đây có phải là thứ bạn đang tìm kiếm không? ssh -p 3022 user@127.0.0.1 Đó là một bước mà tôi đã bỏ lỡ và vừa đi tìm trên một trang web khác.
D. Rừng

10
Tôi cũng đã thêm chuyển hướng cổng từ năm 2020 đến 80, vì vậy tôi có thể dễ dàng truy cập Apache từ trình duyệt bằng 192.0.0.1:2020 . VBoxManage chỉnh sửa myserver --natpf1 "ssh, tcp ,, 2020 ,, 80"
Eduardo Russo

4
thebigdog, bạn có thể trực tiếp không đầu: VBoxHeadless -s 'vmname'
vkostromin

4
Tại sao chúng ta sử dụng cổng 3022 mà không phải là 22 mặc định?
Seraphim

3
Để làm cho cuộc sống dễ dàng hơn, hãy mở ~ / .ssh / config, thêm phần sau Host mybox HostName 127.0.0.1 User myuser Port 3022vào tệp đó (tự thêm thụt lề), sau đó bạn chỉ cần ssh myboxmỗi lần :)
vancexu

129

Thay đổi loại bộ điều hợp trong VirtualBox thành cầu nối và đặt khách sử dụng DHCP hoặc đặt địa chỉ IP tĩnh bên ngoài giới hạn của DHCP. Điều này sẽ khiến Máy ảo hoạt động như một khách bình thường trên mạng gia đình của bạn. Sau đó bạn có thể chuyển tiếp.


2
Bất kỳ ý tưởng làm thế nào cấu hình 2 bộ chuyển đổi sẽ làm việc? Một trên NAT và khác chỉ trên máy chủ?
CantGetANick

16
Theo tôi, phơi bày VM trên mạng cục bộ không phải là lựa chọn tốt nhất (ví dụ trong mạng văn phòng), giải pháp được đề xuất bởi @vkostromin giữ cho việc đóng gói VM trong máy chủ.
Victor P.

1
@VictorP. bạn có thể giải thích tại sao nó không phải là lựa chọn tốt nhất trong mạng văn phòng không? Là do bảo mật hay?
mdo123

1
Ngay cả khi biết rằng đó không phải là lựa chọn tốt nhất, trong cấu hình hiện tại của tôi, đặt bộ điều hợp thành cầu nối là giải pháp duy nhất hoạt động.
James

68

Giữ bộ điều hợp NAT và thêm bộ điều hợp chỉ lưu trữ thứ hai hoạt động tuyệt vời và rất quan trọng đối với máy tính xách tay (nơi mạng bên ngoài luôn thay đổi).

http://muffinresearch.co.uk/archives/2010/02/08/howto-ssh-into-virtualbox-3-linux-guests/

Hãy nhớ tạo một mạng chỉ lưu trữ trong chính hộp ảo (GUI -> cài đặt -> mạng), nếu không bạn không thể tạo giao diện chỉ lưu trữ trên máy khách.


2
Chỉ có câu trả lời này làm việc cho tôi, không có gì khác làm. Ngoài ra, tôi chỉ cần thêm bộ điều hợp bổ sung và nó đã hoạt động, không cần chỉnh sửa /etc/network/interfaces, Cảm ơn!
gãy chân

3
Đồng ý đây là câu trả lời tốt nhất. Nếu không, bạn đang nhảy qua hoops mỗi khi bạn muốn truy cập một dịch vụ chung ( ssh, sftp, vv) vì bạn sẽ phải đi qua một cổng không chuẩn.
Kirk Woll


1
một nguồn tốt khác để thiết lập điều này 2bfox.com/articles/1513/ từ
mdo123

1
@Sparkler là sshd đang chạy? Có một cổng đóng tường lửa?
orip

23

Cách thực hiện mạng chỉ lưu trữ ( tốt hơn so với cầu nối) cho Solaris 10 và Ubuntu 16.04

Thêm giao diện chỉ lưu trữ

  1. Hộp ảo> Tệp> Tùy chọn> Mạng> Mạng chỉ lưu trữ> Thêm
  2. Tắt máy vm.
  3. Cài đặt của VM> Mạng. Bộ điều hợp đầu tiên phải là Nat, chỉ dành cho Máy chủ thứ hai.
  4. Bắt đầu cmd.exe và chạy ipconfig /all. Bạn sẽ thấy dòng:

    Ethernet adapter VirtualBox Host-Only Network:
       ...
       IPv4 Address. . . . . . . . . . . : 192.168.59.1
    

    Bộ điều hợp thứ hai trong máy khách cũng phải ở 192.168.59. *.

  5. Bắt đầu VM.

Solaris 10

  1. Kiểm tra cài đặt ifconfig -a . Bạn sẽ thấy e1000g0 và e1000g1. Chúng tôi quan tâm đến e1000g1.
  2. ifconfig e1000g down
  3. ifconfig e1000g 192.168.56.10 netmask 255.255.255.0 up
  4. Kiểm tra từ máy chủ nếu giao diện này có thể truy cập: ping 192.168.56.10

Giữ nguyên các cài đặt đó khi khởi động lại

# vi /etc/hostname.e1000g1
192.168.56.10 netmask 255.255.255.0
# reboot

Định cấu hình dịch vụ ssh ( quản trị ) để đăng nhập bằng root (không được khuyến khích)

Kiểm tra nếu ssh được kích hoạt

# svcs -a | grep ssh
online         15:29:57 svc:/network/ssh:default

Sửa đổi / etc / ssh / sshd_config để có

PermitRootLogin yes

Khởi động lại dịch vụ ssh

svcadm restart ssh

Từ máy chủ kiểm tra nó

ssh root@192.168.56.10

Ubuntu 16.04

Danh sách giao diện:

ip addr

Bạn sẽ thấy ba giao diện như lo, enp0s3, enp0s8. Chúng tôi sẽ sử dụng thứ ba.

Chỉnh sửa / etc / mạng / giao diện

auto enp0s8
iface enp0s8 inet static
    address 192.168.56.10
    netmask 255.255.255.0

Sau đó sudo ifup enp0s8. Kiểm tra xem enp0s8 có đúng địa chỉ không. Bạn sẽ thấy ip của bạn:

 $ ip addr show enp0s8
 ...
    inet 192.168.56.10/24 brd 192.168.56.255 scope global secondary enp0s8

Nếu không, bạn có thể chạy sudo ifdown enp0s8 && sudo ifup enp0s8

/superuser/424083/virtualbox-host-ssh-to-guest/424115#424115


3
Điều này không hoạt động nếu mạng chỉ lưu trữ của bạn được bật 192.168.59.1và bạn chỉ định 192.168.56.10cho IP khách tĩnh. Toàn bộ địa chỉ mạng con lớp C phải khớp chính xác, vì vậy bạn sẽ phải sử dụng một cái gì đó như 192.168.59.10bên trong khách thay thế.
Câu hỏi Quolonel

23

Bạn cũng có thể sử dụng Mạng cầu nối (hoặc "Bộ điều hợp cầu", trong các phiên bản mới hơn) trong cài đặt mạng . Điều này sẽ đưa VM của bạn vào Vlan với máy của bạn. Vì vậy, bạn chỉ có thể ssh vào VM như thế này.

người dùng ssh @ IP_OF_VM


Với giải pháp này, kết nối SSH có đi qua mạng LAN không?
dùng2233706

16

Để ssh tới máy ảo Ubuntu chạy trong VirtualBox từ máy chủ của bạn, bạn cần thiết lập hai bộ điều hợp mạng cho VM.

Trước hết, dừng VM nếu chưa.

Sau đó chọn VM và nhấp vào menu Cài đặt trong thanh công cụ VirtualBox:

nhập mô tả hình ảnh ở đây

Thiết lập bộ điều hợp 1

nhập mô tả hình ảnh ở đây

Thiết lập bộ chuyển đổi 2

nhập mô tả hình ảnh ở đây

(Lưu ý: bạn không cần thiết lập bất kỳ cổng chuyển tiếp nào.)

Đó là nó. Sau khi thiết lập, bạn có thể khởi động VM của mình. Trong VM của bạn, cấu hình mạng sẽ giống như bên dưới và bạn cũng sẽ có quyền truy cập Internet:

nhập mô tả hình ảnh ở đây

Cũng trong máy chủ của bạn, bạn có thể ssh với VM của mình:

nhập mô tả hình ảnh ở đây

Hãy chắc chắn rằng máy chủ SSH đã được cài đặt và chạy trong VM.

$ ps aux | grep sshd
root 864 0.1 0.5 65512 5392 ? Ss 22:10 0:00 /usr/sbin/sshd -D

Nếu không, hãy cài đặt nó:

$ sudo apt-get install openssh-server

Cũng cho thông tin của bạn:

  • Phiên bản VirtualBox của tôi: 5.2.6 r120293 (Qt5.6.2), 2018
  • Phiên bản Ubuntu của tôi: Ubuntu 16.04.3 LTS
  • Máy chủ của tôi: Windows 10

Nếu bạn không có bộ điều hợp chỉ lưu trữ, bạn có thể tạo một bộ chuyển đổi từ:File > Host Network Manager > Create
Cirelli94

Nó không đến được mạng internet một cách đáng buồn
Cirelli94

5
SSH Quay lại Trang chủ / Văn phòng Máy khách VirtualBox của bạn từ INTERNET

Các câu trả lời được cung cấp bởi người dùng khác ở đây: How to SSH to a VirtualBox guest externally through a host?

... đã giúp tôi hoàn thành nhiệm vụ kết nối từ internet với máy khách của máy tính ở nhà. Bạn sẽ có thể kết nối bằng máy tính, máy tính bảng và điện thoại thông minh (android, IPhone, v.v.). Tôi thêm một vài bước nữa trong trường hợp nó có thể hữu ích cho người khác:

Đây là một sơ đồ nhanh chóng về thiết lập của tôi:

  • Remote device ---> INTERNET --> MODEM --> ROUTER --> HOST MACHINE --> GUEST VM

  • Remote device (ssh client) ---> PASS THRU DEVICES ---> GUEST VM (ssh server)

  • Remote device (leave ssh port 3022) ---> INTERNET --> MODEM --> ROUTER (FWD frm:p3022 to:p3022)--> HOST MACHINE (FWD frm:p3022 to:p22) --> GUEST VM (arrive ssh port 22)

Chìa khóa cho tôi là nhận ra rằng TẤT CẢ các kết nối là PASSING-THROUGHthiết bị trung gian để chuyển từ PC từ xa sang máy ảo khách của tôi ở nhà - Chuyển tiếp cổng!

Lưu ý: * Cần máy khách ssh yêu cầu kết nối an toàn và máy chủ ssh đang chạy để xử lý kết nối an toàn.

  • Tôi sẽ chuyển tiếp cổng 3022 như được sử dụng trong câu trả lời được chọn từ phía trên.

  • Nhập IP của bạn vào nơi cần thiết (modem / bộ định tuyến gia đình, IP máy chủ, IP khách, v.v.), Tên được chọn chỉ là ví dụ - sử dụng hoặc thay đổi.

1. Tạo đường hầm ssh tới cổng 3022 trên địa chỉ IP bên ngoài của IP / bộ định tuyến của modem.

ssh client/device possible commands: ssh -p 3022 user-name@home_external_IP

2.Port Forward = chúng tôi đang chuyển qua kết nối từ bộ định tuyến đến máy chủ

  • Đồng thời đảm bảo các quy tắc tường lửa / IPtable trên bộ định tuyến đang cho phép các cổng được chuyển tiếp (mở nếu cần)

  • Các mục yêu cầu Pfwd SCREEN của Bộ định tuyến: AppName: SSH_Fwd, Port_from: 3022, Giao thức: cả hai (UDP / TCP), IP_address: hostIP_address, Port_to: 3022, mọi thứ khác đều có thể để trống

Tài nguyên phần mềm bộ định tuyến DD-WRT / Thông tin:

3.host Machine Firewall: cổng mở 3022 #so cổng chuyển tiếp có thể truyền qua máy cho khách

  • Máy chủ: Cài đặt VirtualBox, bổ sung khách và máy khách nếu chưa được thực hiện

  • Cấu hình máy khách và sau đó làm theo phần Mạng bên dưới

  • Tôi đã sử dụng GUI VirtualBox để thiết lập mạng khách - dễ dàng hơn CLI

  • Nếu bạn muốn sử dụng các phương pháp khác, hãy tham khảo: VirtualBox/manual/ch06.html#natforward

4.Một số đề xuất sử dụng bộ điều hợp Network Bridge cho khách = truy cập vào mạng LAN và các máy khác trong mạng LAN của bạn. Điều này cũng gây ra rủi ro bảo mật gia tăng, vì hiện tại máy khách của bạn hiện đang tiếp xúc với các máy LAN và có thể là tin tặc INTERNET nếu tường lửa không được thiết lập đúng. Vì vậy, tôi đã chọn Bộ điều hợp mạng được đính kèm với NAT để ít gặp rủi ro bảo mật hơn.

Trên máy khách, hãy làm như sau:

  • Cài đặt mạng VirtualBox của máy khách: Bộ điều hợp 1: Được đính kèm với NAT
  • Quy tắc chuyển tiếp cổng VirtualBox của máy khách: Tên: External_SSH, Giao thức: TCP, Cổng máy chủ: 3022, Cổng khách 22, IP máy chủ và máy khách: để trống
  • nhấp vào nâng cao trong phần Mạng, sau đó nhấp vào Chuyển tiếp cổng để nhập quy tắc
  • Tường máy khách: cổng mở 22 #so ssh kết nối có thể nhập
  • Máy khách: Đảm bảo rằng máy chủ ssh được cài đặt, cấu hình đúng và chạy
  • Kiểm tra LINUX để xem máy chủ ssh có chạy w / lệnh không: sudo service ssh status
  • Có thể kiểm tra netstat để xem kết nối được thực hiện với cổng 22 trên máy khách

Ngoài ra có các máy chủ và máy khách ssh khác nhau tùy thuộc vào nền tảng sử dụng.

  • wikipedia/Secure_Shell
  • wikipedia/Comparison_of_SSH_servers
  • wikipedia/Comparison_of_SSH_clients

Đối với người dùng Ubuntu:

  • ubuntu community: SSHOpenSSH/Configuring
  • ubuntu/community: OpenSSH/Keys

Đó nên là nó. Nếu tôi mắc lỗi hoặc muốn thêm bất cứ điều gì - hãy thoải mái làm điều đó-- Tôi vẫn là một người mới.

Hy vọng điều này sẽ giúp được ai đó. Chúc may mắn!


5

Đối với máy chủ Windows, bạn có thể:

  1. Trong trình quản lý hộp ảo:
    1. chọn ctrl+G trong trình quản lý hộp ảo của bạn,
    2. sau đó vào mạng pannel
    3. thêm một mạng riêng
      1. đảm bảo rằng kích hoạt DHCP KHÔNG được chọn
  2. Trong quản lý mạng (windows)
    1. Chọn bộ điều hợp chỉ lưu trữ máy chủ hộp ảo mới được tạo và thẻ mạng vật lý
    2. Nhấp chuột phải và chọn "Tạo cầu"
  3. Thưởng thức

4

Bạn cũng có thể bắt đầu một cổng chuyển tiếp tới HOST HOẶC BẤT CỨ MÁY CHỦ NÀO KHÁC, từ Khách của bạn. Điều này đặc biệt hữu ích nếu Khách của bạn bị 'khóa' hoặc không thể hoàn thành tùy chọn ModifyVM (ví dụ: không có quyền đối với VBoxManage).

Ba yêu cầu nhỏ là 1) bạn đang / có thể đăng nhập vào VirtualBox Guest (thông qua GUI 'console', Guest khác, v.v.), 2) bạn có tài khoản trên VirtualBox HOST (hoặc Máy chủ khác) và 3) SSH và TCP chuyển tiếp không bị chặn.

Giả sử bạn có thể đáp ứng 3 yêu cầu, đây là các bước:

  1. Trên Guest, chạy netstat -rnvà tìm địa chỉ Gateway đến đích tuyến mặc định 0.0.0.0. Hãy nói rằng đó là "10.0.2.2". Địa chỉ 'Cổng này là (một trong) IP ảo Máy chủ VirtualBox.
  2. Trên Máy khách, chạy ssh -R 2222:localhost:22 10.0.2.2trong đó "10.0.2.2" là địa chỉ IP của máy chủ VirtualBox - HOẶC - bất kỳ IP máy chủ nào khác bạn muốn chuyển tiếp tới.
  3. Trên Máy chủ, chạy ssh 10.0.2.2 -p2222trong đó 10.0.2.2 là cổng ảo / VBHost mặc định được tìm thấy trong bước 1. Nếu đó không phải là máy chủ VirtualBox mà bạn đang chuyển tiếp cổng, thì lệnh làssh localhost -p2222

4

Thực hiện theo các bước bên dưới để đăng nhập vào máy ảo ubfox của bạn đang chạy trong hộp ảo từ máy chủ bằng cách sử dụng putty (Không có chuyển tiếp cổng):

  1. Trên trình quản lý Virtualbox chọn vm, nhấp vào biểu tượng cài đặt. Sau đó vào Mạng và bật hai bộ điều hợp như sau:

    • Bộ điều hợp 1 (Để truy cập internet): Đã đính kèm -> NAT, Nâng cao -> Kiểm tra cáp được kết nối.
    • Bộ điều hợp 2: Được đính kèm với -> Bộ điều hợp chỉ lưu trữ, Nâng cao -> Kiểm tra cáp được kết nối và chế độ Bừa bộn -> Cho phép tất cả.
  2. Bắt đầu ubfox vm.

  3. Đăng nhập vào VM với quyền root.
  4. Chỉnh sửa tệp '/ etc / mạng / giao diện' như bên dưới và lưu nó:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    auto eth1
    iface eth1 inet dhcp
    
  5. Khởi động lại VM.

  6. Đăng nhập vào VM và chạy lệnh bên dưới để kiểm tra IP được phân bổ cho eth1:

    ifconfig
    
  7. Sử dụng IP này để mở phiên putty cho VM.



2

Ubuntu 18.04 LTS

Cấu hình với cầu nối để xem ip máy chủ và kết nối mà không cần "chuyển tiếp cổng"

VirtualBox> nhấp chuột phải vào máy chủ> cài đặt> Mạng> bật bộ điều hợp 2> chọn "bắc cầu"> Chế độ lăng nhăng: cho phép tất cả> Kiểm tra cáp được kết nối> khởi động máy chủ

Trên máy chủ Ubuntu, chỉnh sửa sudo nano /etc/netplan/*init.yamltập tin,

Tệp mẫu của tôi:

network:
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
        enp0s8:
            addresses: [192.168.0.200/24]
            dhcp4: no
            dhcp6: no
            nameservers:
               addresses: [8.8.8.8, 8.8.4.4]
    version: 2

Các lệnh sẽ giúp bạn

nano /etc/netplan/file.yaml     # file to specify the rules of network
reboot now                      # restart ubuntu server right now
netplan apply                   # do after edited *.yaml, to apply changes
ifconfig -a                     # show interfaces with ip, netmask, broadcast, etc...
ping google.com                 # to see if there is internet

Định cấu hình địa chỉ IP tĩnh trên máy chủ Ubuntu 18.04 LTS - với NetPlan


0

Chỉ đơn giản là cài đặt Cài đặt mạng thành cầu nối đã giúp tôi.

IP của bạn sẽ thay đổi khi bạn làm điều này. Tuy nhiên, trong trường hợp của tôi, nó đã không thay đổi ngay lập tức. ifconfigtrả lại cùng một ip. Tôi đã khởi động lại vm và boom, ip tự đặt thành một bắt đầu với 192. * và tôi ngay lập tức được phép truy cập ssh.


Thông tin này tôi đoán là một phần hoặc thậm chí hoàn toàn không chính xác trong một số ý nghĩa chung, tôi không biết. downvoter không thèm nói.
boulder_ruby

Nói một cách dí dỏm, "đối với một số người, nó không hoạt động."
boulder_ruby

0

Trên các mạng an toàn, thiết lập mạng của bạn thành cầu nối có thể không hoạt động. Quản trị viên chỉ có thể cho phép một địa chỉ mac trên mỗi cổng hoặc thậm chí tệ hơn chặn cổng nếu các công tắc phát hiện nhiều máy Mac trên một cổng.

Theo tôi, giải pháp tốt nhất là thiết lập các giao diện mạng bổ sung để xử lý các dịch vụ bổ sung mà bạn muốn chạy trên máy của mình. Vì vậy, tôi có giao diện cầu nối để cho phép bắc cầu khi tôi mang máy tính xách tay về nhà và có thể SSH vào nó từ các thiết bị khác trên mạng cũng như bộ điều hợp máy chủ chỉ khi tôi muốn SSH vào máy ảo của mình khi tôi kết nối đến mạng wifi eduroam trong khuôn viên trường.


0

Sử dụng bộ điều hợp mạng NAT và Thêm cổng chuyển tiếp. Đề cập ip máy chủ thực tế. Không sử dụng 127.0.0.1 hoặc localhost.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.