# 在mac上设置vscode远程连接win11

这事太烦躁了,必须拿区块链记录下来。

## 前置条件:

* 必须从mac发起连接,必须连接到win11上!

* win11上登录的用户是微软账户,不可改变!

## 坑1:OpenSSH Server

win11上默认安装了OpensSSH的客户端,但没有安装服务器端。不小心的话,你会以为自己已经安装全了OpenSSH,比如从win11上发起SSH,连接到mac上是可以的,但从mac上要发起连接到win11就连不上。

注意要在win11上安装好OpenSSH Server。

## 坑2:微软账户用户名/密码

不妨设我的微软账户用户名是xxx@outlook.com,密码是yyy,win11的IP是192.168.0.123

在mac上,要连接win11的方法是:

1. ssh xxx@192.168.0.123 然后输入密码: yyy

2. ssh xxx@outlook.com@192.168.0.123 然后输入密码: yyy

两种都试过了,都不行。1的可能性还大点,但就是不行。

所以,我考虑用公钥/私钥配对的方式登录。

## 坑3:authorized_keys

于是我在mac上先生成了公钥/私钥对,由于没有办法在SSH中输入正确的win11密码,所以我也没有办法使用scp或者ssh-copy-id xxx@192.168.0.123 将公钥复制到win11上。当然,这也没什么困难的,拿个u盘copy就是了。

多数情况下你查到的添加公钥到本地的命令可能是这样的:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

或者使用vi 去编辑~/.ssh/authorized_keys,(顺便说,vim的存盘后退出是:wq)

但win11不同,如果你用的是微软账户登录,那么是管理员,管理员的authorized_keys并没有放在c:\User\xxx\.ssh\authorized_keys下面!而是,C:\ProgramData\.ssh\administrators_authorized_keys

所以,需要把公钥复制粘贴进C:\ProgramData\.ssh\administrators_authorized_keys里面,注意别错了。

那么连接的时候,可以先编辑mac上的~/.ssh/config文件,

Host win11

HostName 192.168.0.123

User xxx

IdentityFile ~/.ssh/id_rsa

存好以后,就可以用ssh win11直接连接上了。

## 坑4:vscode

至此,基本上可以按各种教程来了,在mac上安装vscode,找到插件Remote Development,看一眼应该是微软出品的。安装好以后,它会要你选一下config,找到刚才编辑过的那个就可以了。

连接!

失败!

搜一圈,有人说是RemoteSSH: Path里面要填上absolute path,填上了,没用,继续失败!

没办法,我只好先试着从win11用vscode连mac,成功,我发现win11上的vscode里remote.ssh:remote platform是自动设置的,而在mac上的vscode里面,这一项没有设置,于是在mac的vscode的setting里手动设置了连接到windows。

终于,从mac上的vscode可以连上win11了!

## 续坑:Zemax

我从mac连win11的目的是在mac上写代码,在win上运行,因为zemax只有Windows版本的。而且我的mac内存是千年8G,而win是32G。所以mac就安心当键盘+触控板+Retina屏就最好。

但,同一个zemax+python程序,在win上正常通过,在mac上通过vscode远程登录到win上,运行失败,通过mac用ssh连接到win上,再python run.py,也失败。

报出了一大堆“System.Runtime.Remoting”错误,有可能是Inter-Process Communication (IPC)错误,也可能是zemax做了什么网络版的限制。反正这个问题现在我还没解决。

Reply to this note

Please Login to reply.

Discussion

## 续坑的解决

我先用streamlit写了一个网页,就一个按钮,点击以后os.system("python run.py"),然后从mac端访问,居然通过了!

zemax并没有发现从网页发起运行有什么区别。我大受鼓舞,但这种东西调试不方便啊。

jupyter的精髓就是在cell里做小测试,然后一片一片拼起来。

如果在streamlit里面调用一个.ipynb文件,

把里面的cell一个一个取出来,再单独运行,再返回结果到网页上。

等等,这不就是jupyter远程访问么?

于是在网上找个教程,看看jupyter远程访问的设置如何操作。

搞定以后在win11上启动jupyter lab,去mac上打开网页访问,输入密码,找到程序运行,居然又通过了,zemax仍然没报错。

那么问题来了,vscode上运行jupyter和在网页里访问远端的jupyter区别在哪里?

继续找,发现要在vscode:查看->命令面板->Jupyter: Specify local or remote Jupyter server for connections,

填入选择远端的jupyter地址,再输入密码。

然后,选择内核为远端的jupyter。最终终于运行通过了。

比较一下发现,其实真正的原因是在vscode上运行jupyter的时候,内核是本地的,于是就会爆出IPC错误。但如果用的内核也是远端的,就正常了。