SSH连接

想用windows主机ssh连接虚拟机,连不上。

确保 SSH 服务已安装并运行

虽然Ubuntu系统自带了ssh,但是这是客户端的,服务端的openssh-server没有安装。

1
2
3
4
5
6
7
8
9
10
11
# 检查服务状态
sudo systemctl status ssh # Ubuntu/Debian
sudo systemctl status sshd # CentOS/RHEL

# 若未安装
sudo apt install openssh-server # Ubuntu
sudo yum install openssh-server # CentOS

# 启动并设置开机自启
sudo systemctl start ssh
sudo systemctl enable ssh

检查SSH端口监听

1
sudo netstat -tuln | grep :22
  • 正常应显示:tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
  • 若未监听,修改配置:sudo nano /etc/ssh/sshd_config

确保存在:

1
2
3
Port 22
ListenAddress 0.0.0.0 # 允许所有IP连接
PermitRootLogin yes # 临时允许root登录(测试后建议关闭)

重启SSH服务

1
sudo systemctl restart ssh

VSCode远程连接

在Extensions中搜索Remote,安装Remote Development。
之后左边就会多出一个选项:

点击后,在边栏右上角选择Remotes(SSH)

然后点SSH栏右边的齿轮。

上边栏就会出现:

我们选择第一个,也是Windows下当前用户默认的ssh配置文件夹。

在里面配置远程主机的连接信息

Host指主机名,Linux中@后面的就是。

HostName指ip地址。Linux下ifconfig可以查看。
User指@前面的。

保存文件之后,左边栏就会出现:

SSH远程连接虚拟机 怎么用公钥免除每次登录输入密码的烦恼

服务器存放公钥。
终端存放私钥。

生成密钥对(主机操作)

打开终端(Windows 使用 PowerShell 或 CMD;Mac/Linux 用系统终端)
生成密钥:

1
2
ssh-keygen -t ed25519 -C "your_email@example.com"  # 推荐 ed25519
# 或传统 RSA:ssh-keygen -t rsa -b 4096

按提示完成(默认保存位置 ~/.ssh/id_ed25519

复制公钥到虚拟机的authorized_keys

方法一:自动复制(推荐)(主机操作)

1
2
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@vm_ip
# 输入虚拟机密码一次

方法二:手动复制

1
2
3
4
5
6
7
cat ~/.ssh/id_ed25519.pub # 查看主机上的公钥内容
ssh user@vm_ip # 登录虚拟机

mkdir -p ~/.ssh
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

配置主机的VSCode

F1 > 选择 ​​Remote-SSH: Connect to Host...​​
选择 ​​Configure SSH Hosts...​​ > 添加配置:(其实是帮你打开~/.ssh/config

1
2
3
4
Host MyVM   # 自定义别名
HostName 192.168.1.100 # 虚拟机IP
User your_username
IdentityFile ~/.ssh/id_ed25519 # 私钥路径

保存配置文件(通常是 ~/.ssh/config

常见问题解决

  1. ​权限错误​​:
    chmod 600 ~/.ssh/config # 确保本地 config 文件权限正确
  2. ​服务端配置检查​​:
    • 确认虚拟机 /etc/ssh/sshd_config 包含:
      PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
    • 重启 SSH 服务:
      sudo systemctl restart sshd
  3. ​调试连接​​:
    ssh -Tv user@vm_ip # -v 查看详细日志

✅ 成功标志:使用 ssh user@vm_ip 或 VSCode 连接时无需输入密码即可登录。
遇到问题建议检查两边日志(本地终端 debug 信息或虚拟机 /var/log/auth.log

学习项目中踩的坑和注意点

有的项目课程是2020年左右的,当时使用的boost 1.69和gcc 4.6版本,放到现在(2025年)的Ubuntu 24版本下,不能很好地兼容。
此时为了尽快顺利进入到课程学习的轨道上,而不是为了想办法去兼容新Ubuntu,妥协的做法是安装一个降级的Ubuntu 20版本。

记录安装muduo过程的配套工具的版本

以下环境能成功安装muduo老版本

  1. Ubuntu 20.04.6
  2. gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
  3. g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
  4. cmake version 3.16.3
  5. make: GNU Make 4.2.1 Built for x86_64-pc-linux-gnu

以上,都是Ubuntu此版本apt安装的默认的版本。

Ubuntu的跨虚拟机复制粘贴问题

VMware虚拟机Linux与主机Windows之间不能拖拽、跨端复制粘贴

验证VMware Tools安装状态

1
2
3
4
5
6
# 检查VMware服务状态
sudo systemctl status vmware-tools

# 确认open-vm-tools已安装
sudo apt list --installed | grep open-vm-tools # Debian/Ubuntu
rpm -qa | grep open-vm-tools # CentOS/RHEL

重启关键服务

1
2
sudo systemctl restart vmware-tools
sudo systemctl restart vmtoolsd

如果vmware-tools.service could not be found

安装/重装 open-vm-tools

1
2
3
4
5
6
7
8
9
# Ubuntu/Debian
sudo apt update
sudo apt install --reinstall open-vm-tools open-vm-tools-desktop

# CentOS/RHEL
sudo yum reinstall open-vm-tools open-vm-tools-desktop

# 启用服务(服务名是 vmtoolsd)
sudo systemctl enable --now vmtoolsd

检查驱动加载状态

1
2
3
4
lsmod | grep -E 'vmw_vmci|vmw_vsock_vmci_transport'
# 应有类似输出:
# vmw_vmci 98304 1
# vmw_vsock_vmci_transport 45056 0

强制重装工具

1
2
sudo apt purge open-vm-tools && sudo apt autoremove
sudo apt install open-vm-tools open-vm-tools-desktop

如果不稳定,建议使用挂载点共享文件

目前确实可以复制粘贴文本、小文件了,但是大文件不行,很不稳定。

虚拟机设置 → 选项 → 共享文件夹 → 添加主机目录

会挂载到Linux的/mnt/hgfs下。