之前体验过一把IDEA的远程开发,只能说能看出来IntelliJ想把功能做到很完善,也确实做到了,但由于占用资源太多,即使远程使用的是配置相对非常高的服务器,占用10G+的内存也不是一个好的选择吧,尝试了几次之后就被惊人的延迟和频繁丢失的输入给劝退了。
听说VSCode的远程开发效果非常不错,所以想尝试一下。只需要给服务器开一个专用的SSH端口,把用密码登录的选项禁用掉,就相对安全了。只要有了SSH通道,整个配置就已经完成了,对,就是这么简单。
以RockyLinux8的容器为例。
在容器中安装并启动SSH服务
|
|
这时不出意外会报错,因为配置文件中指定的key文件不存在,执行以下三条命令之后就好了。
|
|
创建一个开发专用的账号,赋予一个登录的shell,指定Home目录,并赋予相应的权限。
|
|
好了,现在/data1/code
已经是dev
账户的家目录了。
现在设置登录相关的信息。随便设置一个密码,其实可以尽量复杂一些。
|
|
这时候尝试从远程登录,可能会这个错误
|
|
你知道,系统并没有正在启动,这明显是一个误报。针对不同的系统可能不同,对于Rocky Linux 8而言,需要删除/run/nologin
文件,再尝试登录就可以了。
删除的这个文件中的内容恰恰就是上面的报错信息,意外吧。
修改sshd配置文件
密码登录既不方便也不安全,需要先用ssh-copy-id
来实现证书登录,再从服务端关闭密码登录功能。
|
|
这就可以了。然后在服务端的/etc/ssh/sshd_config
中找到
|
|
把yes
改成no
,重启ssh-server,就会发现已经无法用密码登录了,也就安全了。
搞定了。
总结
最近使用VSCode比较多,我发现其实绝大多数情况下使用VSCode就已经够了,完全不需要JetBrains家的产品了,甚至JB家引以为傲的Java开发好像也没有那么大的优势了,jdt-lsp的很多提示已经比IDEA更友好了,更容易在代码上线运行之前就发现问题。举一个例子
|
|
上面的代码非常具有迷惑性,因为实际运行时你会发现,如果没有执行.age()
方法,这个值将是null
,而不是0,这在VSCode中就会提示如果不使用@Builder.Default
,则代码中指定的这个=0
的值将直接被抛弃。这非常有用。