mac端ssh连接win

mac端ssh连接win上的linux虚拟机

win端ssh连接mac

日常开发时要开一些虚拟机或是其他的一些服务,全都放在一台电脑上压力有点大,就想着能不能把某些服务开在其他电脑上,这样用一台电脑去连接,毕竟都在一个局域网内,想着也能实现,就去查了一些资料,结果零零散散的,很多都是失败的,尤其是用mac连接win上的linux虚拟机,怎么查也查不到。。。

系统说明

  • macOS13.1
  • windowns11
    • Centos7(win内部虚拟机,使用VMware)

一、前置条件

1. ip查看

mac与win同在一个局域网内,比如连接到同一个Wi-Fi

  • 查看win的ip为192.168.0.5
ipconfig
image-20230224193618956
  • 查看mac的ip为192.168.0.7

    image-20230224193830548

2. 关闭防火墙

此时直接互相ping是ping不通的

  • 关闭win防火墙

在设置中的搜索栏进入

image-20230224194403261

或是在控制面板关闭防火墙即可

image-20230224194443220
  • 关闭mac防火墙

转到设置->网络,可以看到防火墙时默认打开的,这里关闭即可

image-20230224194906777

此时再互相ping发现可以ping通

image-20230224195012176 image-20230224195105400

这样才可以进行下面的操作

二、win端ssh连接mac

mac上默认安装了ssh服务,但是没有启用

转到设置->通用->共享,打开远程登录即可

此时可以在终端中验证:

sudo systemsetup -getremotelogin

image-20230224195940516

On代表ssh服务已开启

或者直接使用命令开启:

sudo systemsetup -setremotelogin on

此时可以用ssh连接到你的Mac

在win上下载ssh客户端工具,这里使用Termius,普通版并不收费,同时自带sftp工具

image-20230224200304682

端口号默认是22,输入ip、用户名、密码即可

用户名可以在访达中查看:

image-20230224200445338

连接成功,用于mac比较像linux,所以大多命令与linux都是互通的

image-20230224200554375

同样通过sftp工具可以访问mac上的任意文件,实测局域网下的速度大概能达到6MB/s左右

image-20230224200917021

三、mac端ssh连接win

首先在win上安装openSSH工具

进入设置->应用->可选功能->添加可选功能->选择OpenSSH服务器,下载即可

但是这里我安装提示失败,所以提供另一种方式手动安装

转到https://github.com/PowerShell/Win32-OpenSSH/releases,下载其中的OpenSSH-Win64.zip

解压至指定位置

运行服务:

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
#要在管理员权限下运行

成功会提示三个成功!

之后启动sshd服务:

net start sshd

到此服务已经安装完毕,默认端口一是22,默认用户名密码为Window用户名和密码

同样在文件管理处查看最准确:

image-20230224202028819

连接即可:

image-20230224202114053

不过个人认为win的终端工具有点傻,简直不要太难用,所以这个基本没啥用,但是连上sftp传文件还是挺方便的

四、mac端ssh连接win上的linux虚拟机

首先,如果虚拟机的网络使用的是桥接模式,则虚拟机将分配与物理网络中的其他设备相同的IP地址,可以通过ifconfig查看,比如可能是192.168.0.8。因此,可以像连接win一样连接到虚拟机,这样后面就没啥可说的了。

如果使用的是NAT模式,则就要配置一番了!

image-20230224202736648

在NAT模式下,虚拟机使用虚拟网络适配器连接到win的虚拟网络中,意味着虚拟机的IP地址和端口与win和win所在的物理网络不相关,所以无法通过物理网络直接访问虚拟机。

为了使win和物理网络上的其他设备即我的mac能够访问虚拟机,我们要配置端口映射,端口映射就将win主机上的一个端口映射到虚拟机的一个端口上。当win主机或其他设备比如mac连接到映射的端口时,请求将转发到虚拟机的相应端口,从而实现与虚拟机的通信。

理解了原理,我们来实操一下!

首先端口映射是从VMware 6.5版本后才开始引入的功能,现在应该没有人还在用这么老的版本吧。。。

  • 点击编辑->虚拟网络编辑器

image-20230224203949433

  • 选中NAT模式->点击更改设置

image-20230224204042297

  • 选中NAT模式->点击NAT设置

image-20230224204140800

  • 可以看到

    image-20230224204220643

  • 点击添加,按照提示填写即可

image-20230224204540318

一直确定即可!

通过工具可连接win内部的虚拟机:

image-20230224204802258

到这里就配置好了,但是每次重启网络后每台电脑包括虚拟机的ip都会变化,因此我们可以配置静态ip,其中比较好配置的就是虚拟机的ip的,因为NAT本来就是虚拟网络,物理网络中是不存在的。

编辑此文件:

vim /etc/sysconfig/network-scripts/ifcfg-ens33

设置内容(更改下文有注释的即可):

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"	#改为static网络
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="0bc8ccc6-3633-4d26-b522-14c79f744014"
DEVICE="ens33"
ONBOOT="yes"	#改为yes,系统启动的使用网络接口有效
IPADDR=192.168.162.130	#指定的静态ip,注意前缀和网关一样
GATEWAY=192.168.162.2	#网关,可在WMware中查看
DNS1=8.8.8.8	#域名解析器

之后重启网络服务或重启系统即可生效:

service network restart	#重启网络服务
reboot	#重启系统

那有如何配置每台电脑的局域网ip为静态呢?本文就不做介绍了,当然不配置的话也行,更方便一点的做法是在hosts文件里映射一个电脑名称,后面应用这个名称,每当ip变化的时候修改hosts文件中的ip即可。