VirtualBox is a popular virtualization software that allows you to run multiple operating systems on your computer. One useful feature it provides is the ability to access the guest virtual machines over SSH. This allows you to manage and interact with the VMs securely over an encrypted connection.
In this comprehensive guide, we will walk through the entire process of setting up and enabling SSH access to an Ubuntu VM running in VirtualBox.
Overview of SSH
Before we jump into the setup instructions, let‘s first discuss SSH and its core components at a deeper level.
What is SSH?
SSH, or Secure Shell, is a cryptographic network protocol that allows secure remote login from one computer to another. It provides strong authentication and secure encrypted data communication between two untrusted hosts over an insecure network.

SSH operates at the application layer over TCP, wrapping the transport layer with authentication, encryption and integrity verification.
Some of the main benefits SSH offers:
- Host and data encryption to prevent snooping of traffic
- User authentication through public-key cryptography
- Secure tunneling capabilities for other apps over its channels
Encryption in SSH
SSH uses hybrid encryption by leveraging various algorithms for key exchange, encryption, integrity checks:
Key Exchange
Diffie-Hellman with 2048+ bit keys (grup14, grup16)
Encryption
AES 128/192/256-bit, Blowfish, CAST128, 3DES
Integrity
SHA1, SHA2 for HMAC verification
This combination of strong asymmetric and symmetric cryptography provides robust encryptions for the SSH tunnels.
Authentication in SSH
For authenticating and verifying user identity, SSH relies on three core mechanisms:
1. Password-based – Simple but prone to brute force attacks
2. Public Key-based – Most secure method using asymmetric keys
3. Host-based – Authenticating against local /etc/hosts records
Public key authentication is recommended over default password method as it eliminates transmitting credentials over the wire.
SSH Architectural Components
SSH operates over a client-server model with three main components:
SSH client – The command line ssh tool used to initiate connections to servers
SSH server – The sshd daemon process running on host receiving connections
SSH agent – Optional component that handles unlocked private keys in memory
Understanding this client-server architecture helps troubleshoot connectivity issues.
Why SSH Over Alternatives?
With various protocols offering secure remote access, why choose SSH? Here are some benefits SSH has over alternatives like HTTPS:
Fine-grained control – SSH allows granular network level access control per user, group or IP address. Much more flexible than HTTPS.
No dependency on TLS certificates – SSH relies on built-in cryptography mechanisms without needing TLS certs prone to expiration or compromises.
Port forwarding capabilities – SSH tunneling allows accessing remote TCP ports not even exposed publicly, unlike HTTPS limited to its own port.
Inspectable and auditable – As an open standard protocol, SSH is transparent in its workings and freely auditable.
Lightweight – SSH implementation is lightweight using just small daemon processes unlike HTTPS which relies on heavy web server stacks.
So for remotely accessing command-line interfaces, SSH provides more control and security than even HTTPS can offer. Of course, the flip side is HTTPS is still easier for graphical apps and browser access.
Recent SSH Vulnerabilities
While SSH is considered secure, various vulnerabilities have been uncovered in recent implementations:
- Buffer overflows – Common memory safety issues that allow remote code execution attacks.
- Weak MAC algorithms – Flaws found in HMAC verification allowing traffic forgeries.
- Deprecated key exchanges – Older Diffie-Hellman groups vulnerable to man-in-the-middle attacks.
However, with ongoing maintenance of SSH codebases and proper configuration, these risks can be minimized.
According to a 2022 survey, 34% of organizations reported facing attacks targeting SSH:

So while secure, keeping SSH software updated is vital.
SSH Usage Stats
Despite vulnerabilities, SSH usage has only continued growing with the rise of cloud computing and automation:
- 94% of enterprises use SSH to manage infrastructure according to Redhat surveys
- 27 billion SSH authentication keys projected globally by 2024 according to a MarketsandMarkets report
- SSH traffic has doubled since 2020 driven by remote access Needs
This data highlights the indispensability of SSH for modern IT environments.
Step-by-Step Guide
Now let‘s jump into the hands-on guide for setting up SSH on a VirtualBox Ubuntu VM:
1. Install SSH Server
The SSH server is not installed by default on Ubuntu desktop. Connect to the VM and run:
$ sudo apt update
$ sudo apt install openssh-server
Verify SSH server status with:
$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabl
Active: active (running) since Thu 2022-09-22 05:46:55 GMT; 2min 28s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 5772 (sshd)
Tasks: 1 (limit: 2353)
Memory: 5.0M
CPU: 48ms
CGroup: /system.slice/ssh.service
└─5772 /usr/sbin/sshd -D
Sep 22 05:46:55 ubuntu2204 systemd[1]: Started OpenBSD Secure Shell server.
This confirms SSH daemon is running.
2. Configure Port Forwarding
Go to the VM Network settings and open Advanced Port Forwarding. Add a new rule:
- Protocol: TCP
- Host IP: 127.0.0.1
- Host Port: 2222
- Guest IP: 10.0.2.15
- Guest Port: 22
This forwards host port 2222 to guest SSH port 22.
3. Enable SSH on Guest
If SSH not already running, enable it:
$ sudo systemctl enable ssh
$ sudo systemctl start ssh
Optional – For added security, edit /etc/ssh/sshd_config and change the default SSH port 22 to something else like 2222.
4. Connect via SSH
On your host OS, connect using the ssh command with -p 2222:
$ ssh -p 2222 username@localhost
When prompted, enter password to login!
The -p 2222 specifies our custom forwarded SSH port.
Understanding Communication Flow
Here is what happens when connecting through SSH:
1. Client initiates SSH over port 2222 to localhost
2. VirtualBox intercepts and redirects per port forwarding rules to guest port 22
3. Ubuntu VM receives connection on port 22 and responds over SSH protocol
4. Encrypted data flows through the redirected tunnel
So in essence, the port forwarding allows accessing the isolated VM as if hosted locally. The whole pathway is encrypted end-to-end.
SSH Authentication Methods
By default, SSH uses password authentication – the user simply enters the correct password when prompted to login.
While simple, this is vulnerable to brute force attacks.
Instead, public key authentication is recommended:

It works by:
- Generating a key pair – private key on client and public key on the server
- To login, the private key generates a digital signature sent to server
- Server validates this signature against the stored public key to allow access
This eliminates transmitting credentials over the connection.
Here are some best practices for keys:
- RSA 2048+ bit or EdDSA algorithms
- Store private keys with strong passphrases
- Disable password-based login, especially for root
For guides on SSH keys, see references.
Hardening SSH Security
Here are some tips for further securing SSH:
1. Change Default Port
Change the default SSH port 22 to a non-standard one like 2222. This can reduce attack surface from bots/scripts targeting port 22.
2. Disable Root Login
Only allow root login over console, not SSH. Use sudo when needing elevated privileges.
3. Install Fail2ban
Fail2ban monitors logs for repeated failed login attempts and firewalls off IPs passing thresholds. This helps mitigate brute force attacks on SSH credentials.
4. Set SSH Banner
Configure Banner /etc/issue.net in sshd_config. This shows a warning message on clients to deter unauthorized access attempts.
5. Utilize SELinux/AppArmor
Enable Linux security modules like SELinux or AppArmor profiles for SSH to enforce strict access controls and policies.
6. Two-Factor Authentication
Consider implementing two-factor authentication using Time-based One-time Password Algorithm (TOTP) apps for improved security.
SSH Troubleshooting
Here are some common issues faced with SSH connectivity:
Permission Denied Errors
- Check OS firewall (ufw), TCP Wrappers config blocking access
- Verify correct SSH keys and modes if doing key-based login
Authentication Failures
- Wrong credentials or keys being passed
- SSH agent not running resulting in no keys available
Timeout Errors
- Networking issues like VM isolated or unreachable
- Port forwarding rule incorrectly configured
Protocol Mismatch
- SSH client trying SSL/TLS instead of SSH
ssh -oHostKeyAlgorithms=+ssh-rsa
"Connection closed by remote host"
- Premature connection aborts due to problems at server-side
- Can be firewall rules, failed DNS resolution
Quick troubleshooting checks:
- Isolate networking problems first
- Log analysis on
auth.logandsyslogon server-side - Strace tool to trace system calls and signals
Also refer to documentation on your SSH server and client implementations for distro-specific help.
This covers common pitfalls and their investigation for debugging SSH connections.
Conclusion
We have gone through a comprehensive guide to setting up SSH connectivity with Ubuntu VMs in VirtualBox – understanding SSH‘s workings, benefits over HTTPS, security considerations, step-by-step configuration specifics, troubleshooting common errors and best practices around hardening SSH.
Leveraging SSH is critical for securely managing infrastructure, especially in the cloud era with remote access needs. Properly configuring and hardening SSH is essential for reducing attack surface.
With its ubiquitous adoption, strong encryption standards and advancing features like two-factor authentication support, SSH will continue securely enabling remote server admin for the foreseeable future.


