上一篇                     
               
			  如何ssh到虚拟机linux服务器
- Linux
- 2025-07-19
- 4416
 使用终端输入命令
 
 
ssh 用户名@服务器IP -p 端口号(默认端口22可省略),按提示输入密码即可连接,需确保虚拟机已启动SSH服务并获取其IP地址
要通过SSH连接到Linux虚拟机服务器,需完成从环境准备到实际连接的多个步骤,以下是系统性的操作指南:
前置准备:虚拟机与本地环境配置
| 步骤 | 操作说明 | 注意事项 | 
|---|---|---|
| 虚拟机网络模式设置 | 在虚拟机管理软件(如VirtualBox、VMware)中,选择虚拟机的网络适配器模式: 桥接模式:虚拟机直接接入物理网络,可获得与主机同网段的IP地址。 NAT模式:通过主机共享网络,需配合端口转发使用。 仅主机模式:适用于隔离测试环境,需额外配置路由。 | 推荐使用桥接模式,便于直接通过IP访问,若需安全隔离,可选择NAT并配置端口映射。 | 
| 检查虚拟机IP地址 | 登录虚拟机,执行 ip addr或ifconfig查看网络接口的IPv4地址(如168.1.100)。 | 若IP动态变化,可设置静态IP或通过主机名解析(需配置/etc/hosts)。 | 
| 安装SSH服务(若未预装) | 根据Linux发行版执行命令: Ubuntu/Debian: sudo apt update && sudo apt install openssh-serverCentOS/RHEL: sudo yum install openssh-serverFedora: sudo dnf install openssh-server | 确保安装后 sshd服务已启动(sudo systemctl enable sshd)。 | 
SSH连接配置与认证方式
生成SSH密钥(推荐)
在本地终端执行:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 默认保存路径为~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)。
- 按回车跳过密码短语设置(简化登录)。
将公钥发送至虚拟机
ssh-copy-id -i ~/.ssh/id_rsa.pub username@vm_ip
若虚拟机未启用密钥登录,需先在虚拟机上执行:
mkdir -p ~/.ssh chmod 700 ~/.ssh echo "你的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
密码认证(可选)
若无需密钥登录,直接使用:

ssh username@vm_ip -p port
输入密码即可登录(默认端口22)。
本地客户端工具选择与连接
| 操作系统 | 工具 | 连接命令/步骤 | 
|---|---|---|
| Windows | PuTTY/MobaXterm/Git Bash | 打开工具,输入 username@vm_ip指定端口(非22时需手动填写) 点击连接并输入密码 | 
| macOS/Linux | 终端 | ssh username@vm_ip -p port | 
| iOS/Android | Protti (App) | 输入主机、端口、用户名及密码 | 
常见问题排查
连接失败的可能原因
| 现象 | 原因 | 解决方案 | 
|---|---|---|
| Connection refused | SSH服务未启动/防火墙拦截 | sudo systemctl start sshd+ 检查防火墙规则 | 
| No route to host | 网络不通/IP错误 | 用 ping vm_ip测试连通性 | 
| Permission denied | 密钥权限错误/未添加公钥 | chmod 600 ~/.ssh/authorized_keys | 
特殊场景处理
- NAT模式下端口转发:在虚拟机软件中配置端口转发(如将主机2222端口转发到虚拟机的22端口),然后通过ssh -p 2222 localhost连接。
- SELinux限制:若虚拟机为CentOS且开启SELinux,需临时设置为宽松模式:sudo setenforce 0。
最佳实践与安全建议
- 禁用Root登录:编辑/etc/ssh/sshd_config,设置PermitRootLogin no,重启SSH服务。
- 限制IP访问:在sshd_config中添加AllowUsers username或DenyUsers规则。
- 更换默认端口:修改sshd_config中的Port参数(如改为2222),并重启服务:sudo systemctl restart sshd。
FAQs
Q1:为什么SSH连接时提示“Network error: connection timed out”?
A1:可能原因包括虚拟机IP错误、网络模式配置不当(如NAT模式下未设置端口转发)、宿主机防火墙拦截,解决方法: 
- 检查虚拟机IP是否正确(ip addr);
- 尝试切换网络模式为桥接;
- 暂时关闭宿主机防火墙(Windows: 控制面板 → 系统保护 → Windows Defender → 允许应用通过防火墙)。
Q2:如何使用SSH密钥认证时提示“Access denied”?
A2:常见原因及解决步骤: 

- 公钥未正确添加到虚拟机:执行cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys;
- 密钥权限过大:确保私钥id_rsa权限为600,目录.ssh权限为700;
- SSH服务未读取密钥文件:检查sshd_config中的AuthorizedKeysFile路径是否正确(默认`~/.ssh/
 
  
			