在开发环境搭建和服务器管理中,我们经常需要操作虚拟机(VM)。直接使用虚拟机本地的图形界面不仅效率低下,还会占用大量系统资源。SSH(Secure Shell)协议提供了一种安全、高效的远程连接方式,特别适合以下场景:
我管理过上百台虚拟机实例,SSH连接是最基础也最关键的技能。下面分享一套经过实战检验的完整方案。
VMware和VirtualBox都提供多种网络模式,常见的有:
| 模式类型 | 特点 | 适用场景 |
|---|---|---|
| NAT | 虚拟机共享主机IP | 单机开发测试 |
| 桥接 | 虚拟机获得独立IP | 需要局域网访问 |
| Host-Only | 仅主机可见 | 安全隔离环境 |
建议开发环境选择桥接模式(Bridged),确保虚拟机和主机处于同一局域网段。在VMware中:
注意:如果使用公司/学校网络,桥接模式可能受防火墙限制,此时可改用NAT+端口转发
动态IP会导致连接地址频繁变更,建议为虚拟机配置静态IP:
bash复制sudo nano /etc/netplan/00-installer-config.yaml
修改配置(根据实际网络调整):
yaml复制network:
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
应用配置:
bash复制sudo netplan apply
验证IP:
bash复制ip a show ens33
Ubuntu/Debian:
bash复制sudo apt update && sudo apt install openssh-server
CentOS/RHEL:
bash复制sudo yum install openssh-server
编辑配置文件:
bash复制sudo nano /etc/ssh/sshd_config
推荐修改项:
code复制Port 2222 # 修改默认端口
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 强制密钥认证
AllowUsers devuser # 只允许特定用户
重启服务:
bash复制sudo systemctl restart sshd
安全提示:完成密钥配置前不要禁用密码登录,否则可能被锁死
在本地机器生成密钥:
bash复制ssh-keygen -t ed25519 -C "vm_connection"
将公钥上传到虚拟机:
bash复制ssh-copy-id -p 2222 devuser@192.168.1.100
bash复制ssh -p 2222 devuser@192.168.1.100
bash复制nano ~/.ssh/config
添加内容:
code复制Host myvm
HostName 192.168.1.100
User devuser
Port 2222
IdentityFile ~/.ssh/vm_connection
之后只需执行:
bash复制ssh myvm
bash复制ssh -L 8080:localhost:80 myvm
bash复制scp -P 2222 local_file devuser@192.168.1.100:~/remote_path
可能原因:
排查步骤:
bash复制ping 192.168.1.100
bash复制telnet 192.168.1.100 2222
bash复制sudo ufw status
典型错误:
code复制Permission denied (publickey)
解决方案:
bash复制chmod 600 ~/.ssh/vm_connection
chmod 644 ~/.ssh/vm_connection.pub
bash复制cat ~/.ssh/authorized_keys
bash复制sudo nano /etc/ssh/sshd_config
# 修改 PasswordAuthentication yes
sudo systemctl restart sshd
防止SSH超时断开:
bash复制nano ~/.ssh/config
添加:
code复制Host *
ServerAliveInterval 60
TCPKeepAlive yes
bash复制sudo apt install fail2ban
sudo systemctl enable fail2ban
bash复制sudo tail -f /var/log/auth.log
对于长期维护的虚拟机,建议使用tmux或screen保持会话:
bash复制sudo apt install tmux
tmux new -s dev_session