在Virtual Box里安装了Ubuntu 20.04虚拟机,打算在Windows上使用ssh连接,按照网上的教程,发现怎么都无法连接上虚拟机,报错: ssh_exchange_identification: read: Connection aborted
。经过排查,发现是Ubuntu20.04没有安装ssh-server(我在安装Ubuntu系统时为了节省时间,跳过了安装软件的步骤,可能是因为这个)。
1 ssh与sshd
- openssh (ssh = secure shell)
在主机中开启了openssh服务,就对外开放了远程连接的接口。sshd是openssh的服务端;ssh是openssh的客户端。
ssh—————>sshd
client server
2 查看是否安装openssh
Ubuntu默认安装了openssh,但是如果在系统安装过程中选择了最小安装和跳过了软件安装的过程,可能会出现像我这种情况ssh未安装(成功)的情况。
使用dpkg -l |grep ssh
查看ssh安装情况。如果下面这两个都有,就没有问题。
openssh-client
openssh-server
我安装的Ubuntu系统只有client而没有server,所以在Windows下通过ssh连接Ubuntu失败。这时,使用sudo apt install ssh
安装ssh即可。安装后再使用dpkg -l |grep ssh
查看是否安装成功。
3 查看ssh与sshd服务是否开启
使用命令查看ssh与sshd服务是否开启
ps -e | grep ssh
-
如果只有ssh-agent那ssh-server还没有启动,需要
/etc/init.d/ssh start
或者
service sshd start
启动服务,如果看到sshd那说明ssh-server已经启动了。 -
ssh-server配置文件位于
/ etc/ssh/sshd_config
,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。然后重启SSH服务:sudo /etc/init.d/ssh restart
4 VirtualBox的网络设置
虚拟机的网络有两种选择:网络地址转换(NAT) 或者 桥接网卡 。这两种网络模式任选其一即可。
桥接模式下,共享本地主机网卡,在同一个局域网之下,直接获取Ip地址就可以进行连接了。
Nat模式下,获取的Ip与本地主机不是同一个网段,需要做端口转发,才能本地ssh连接虚拟机。
这里使用网络地址转换(NAT) 模式: 在VirtualBox中点击Ubuntu20.04的虚拟机 设置 - 网络 - 网卡1 - 连接方式 -》选择 网络地址转换(NAT) - 高级 - 端口转发 -》新建规则:名称ssh,协议TCP,主机端口22,子系统端口22,其他空。 如下图:
22是ssh默认使用的端口,如果主机端口设置其他端口如8022,则在进行ssh连接时需要加上ssh -p 8022
的参数。
如果子系统端口设置其他端口,则需要在子系统中修改/etc/ssh/sshd_config
配置里的端口。
5 建立ssh连接
在主机Windows的命令行中,使用ssh <username>@localhost
就可以连接到Ubuntu虚拟机了。