ssh连接linux虚拟机,以deepin20.3为例

1.VMWare 虚拟网卡配置

VMWare虚拟机常用的网络链接方式有下面这3种

  • 桥接(最方便)
  • nat(需要设置端口映射)
  • 仅主机(无法联网)

在我的测试中,不管用上面哪种方式安装,都是可以直接查询IP后,进行ssh连接的

需要注意是,如果你所在的环境没有你可以直接管理的路由器(比如校园网)那就不要选择桥接模式,不然你的Linux虚拟机可能因为没有登陆校园网而无法上网;这时候建议选择NAT模式!

  • 桥接模式:以当前主机为桥,直接接入上级路由器;此时虚拟机会作为一个普通设备接入局域网,可以被局域网内的其他电脑直接访问;
  • NAT模式:借用当前主机的端口进行互联网访问,此时虚拟机并没有直接接入局域网,如果其他局域网内设备想访问虚拟机,必须设置端口映射;当前主机可以正常通过虚拟机的IP访问到虚拟机。
  • 仅主机模式:只有当前主机能访问到虚拟机,且该虚拟机无法上网;

如下便是我安装(创建)虚拟机时,选择桥接网络的截图。

image-20230507191249934

顺带提一嘴,安装deepin虚拟机的时候,环境选择ubuntu 64位就可以了,并不需要去搜deepin基于debain的版本号(而且我也没搜到)

2.安装 openssh

虚拟机 中执行:

sudo apt install openssh-client openssh-server
sudo /etc/init.d/ssh restart

我安装的是deepin20.3,自带了这两个软件包,所以只需要执行重启一下ssh,保证服务正常就行了

1
2
3
4
5
6
7
8
9
$ sudo apt install openssh-client openssh-server
请输入密码:
验证成功
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
openssh-client 已经是最新版 (1:7.9p1.10-deepin1)。
openssh-server 已经是最新版 (1:7.9p1.10-deepin1)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。

而在centos8中,openssh-server也是自带了,不需要安装,启动就行了

1
systemctl start sshd

3.查询虚拟机 IP

在 Linux 虚拟机 中执行:

1
ifconfig

找到 ens33 下的 IPv4 地址,记下来(你的虚拟机里面可能不是33,这不重要)

image-20230507191737489

4.设置端口转发

咳咳,我发现原来NAT在虚拟机里面查询到的那个IP也是可以直接链接的,所以设置端口转发也是没有必要的🤣!除非你想要让局域网内的其他机器链接到你这个虚拟机里面的服务。

所以这一步是可以跳过的;不过记录下来,如果你有这个需求就可以根据教程设置一下。

VMWare Workstation 中:

1
菜单栏 → 编辑 → 虚拟网络编辑器 → VMNet8 -> 更改设置 → NAT 设置 → 添加端口转发

需要提供管理员权限,在弹出的窗口中选确定

image-20230507191906402

确定了管理员权限后,再选择VMnet8,点击NAT设置

image-20230507191956271

点击添加端口转发

image-20230507192037860

image-20230507192056228

进入映射传入端口界面后,按下面填写

  • 主机端口:是你当前宿主机的本机端口,可以随便填一个;但要保证不要和windows已有的本地端口冲突。端口号范围是0~65535,建议选用5位数的不常用端口!
  • 虚拟机IP地址:使用ifconfig查到的虚拟机ip
  • 虚拟机端口:22(ssh默认端口)

确定,并点击虚拟网络编辑器中的应用(或者确定)按钮;

5.开放防火墙

在 deepin 虚拟机 中执行:

sudo ufw allow ssh

如果ufw命令找不到,那就安装一下这个命令

1
2
$ sudo ufw allow ssh
sudo: ufw:找不到命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ sudo apt-get install ufw
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列【新】软件包将被安装:
ufw
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 164 kB 的归档。
解压缩后会消耗 852 kB 的额外空间。
获取:1 https://community-packages.deepin.com/deepin apricot/main amd64 ufw all 0.36-1 [164 kB]
已下载 164 kB,耗时 0秒 (1,316 kB/s)
正在预设定软件包 ...
正在选中未选择的软件包 ufw。
(正在读取数据库 ... 系统当前共安装有 251044 个文件和目录。)
准备解压 .../archives/ufw_0.36-1_all.deb ...
正在解压 ufw (0.36-1) ...
正在设置 ufw (0.36-1) ...

Creating config file /etc/ufw/before.rules with new version

Creating config file /etc/ufw/before6.rules with new version

Creating config file /etc/ufw/after.rules with new version

Creating config file /etc/ufw/after6.rules with new version
Created symlink /etc/systemd/system/multi-user.target.wants/ufw.service → /lib/systemd/system/ufw.service.
正在处理用于 rsyslog (8.1901.0.10-1+dde) 的触发器 ...
正在处理用于 man-db (2.8.5-3) 的触发器 ...

再执行一下,显示的结果如下。此时就已经ok了

1
2
3
$ sudo ufw allow ssh
Rules updated
Rules updated (v6)

6.连接测试

这是ssh连接的通用格式,默认的ssh端口是22

1
ssh 用户名@虚拟机ip

如果是nat端口映射,需要指定ip,就在后方添加-p选择端口;假设你设置了NAT虚拟机22端口到主机2222端口的NAT映射,那就可以使用如下命令进行链接,因为映射到了本地,所以IP我们可以填localhost或者127.0.0.1代表本机的本地IP,二者是等价的

1
2
ssh 用户名@localhost -p 2222
ssh 用户名@127.0.0.1 -p 2222

在windows的cmd中执行如下命令,就能连上你的虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS C:\Users\moth> ssh mothra@192.168.6.113
The authenticity of host '192.168.6.113 (192.168.6.113)' can't be established.
ED25519 key fingerprint is SHA256:ZFGdOP9rRgV3SA0V1W3yikrTWDd8V+8sYxTPgyQu5WQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.6.113' (ED25519) to the list of known hosts.
mothra@192.168.6.113's password:
验证成功
Welcome to Deepin 20.9 GNU/Linux

* Homepage:https://www.deepin.org/

* Bugreport:https://bbs.deepin.org/

mothra@mothra-PC:~$

当然,你也可以选择使用其他ssh终端来链接,具体方法根据终端软件百度教程就行了。

7.生成 ssh 密钥对(选做)

宿主机 (Windows) 执行:

ssh-keygen

敲回车直到执行完成(已有公钥可跳过此步)

宿主机 (Windows) 中用 Powershell 执行:

cat ~/.ssh/id_rsa.pub | ssh 虚拟机用户名@虚拟机IP "cat >> ~/.ssh/authorized_keys"

命令中的虚拟机用户名用你在虚拟机中创建的linux用户名替换;

虚拟机IP用刚刚第3步中查到的虚拟机IP替换(刚刚背诵的);

输入密码即可!


配置了ssh密钥后,无需键入密码即可连接(如果你使用vscode来ssh链接虚拟机,这点很重要,非常省事)

ssh 虚拟机用户名@虚拟机IP

参考博客:https://www.cnblogs.com/BinarySong/p/16244415.html