远端服务器二三事 | 免密登陆 + vscode图形化管理远端服务器

1,764 阅读3分钟

王志远,微医前端技术部

前言

最近写一个 puppeteer 爬虫工具,需要经常【ssh 登陆 - 输入密码 -- 执行 shell - 服务器查看日志】,这个简单的动作在重复了无数遍后变得不可忍受,程序员最大的天敌是无意义的重复,于是有了如下演变

  • 输入密码:采用 ssh 配置实现免密登陆
  • 登陆服务器:vscode 插件 Remote-SSH
  • shell 调试:Shell-format, shellman 插件

除了核心流程外,还有些利用 shell 自动化的小优化,比如【采用 ssh 配置实现免密登陆】,动作繁琐固化,采用 shell 脚本去实现就变得通用快捷了起来(puppeteer 是浏览器行为的自动化、脚本是命令行为的自动化,我可太爱自动化了)。

废话少说,让我们开始吧。

本文目标

  1. 免密登陆:只需要sh 别名,无需输入密码就能够做到免密登陆,解决本地登陆输密码繁琐问题,
  2. shell 脚本自动化配置:.ssh/config+shell 脚本实现远端服务器的管理,解决多服务器管理问题
  3. 自实现 vscode 插件 weiyi-tools 支持图形化管理执行脚本功能推荐:解决执行、管理 shell 脚本麻烦问题
  4. vscode 神器 Remote-SSH 推荐及使用指南

bfd01186db5e7514349f9b7146cdb437

输入密码:采用 ssh 配置实现免密登陆

密码其实就是个认证手段,而如果我们认定某用户(电脑)一定可信任,就不用认证了,那用户该怎么自证身份呢?ssh 公私钥,本文会实现如何配置 ssh 公私钥从而达到免密登陆的目的

达到的效果

只需要sh 别名,无需输入密码就能够做到免密登陆。

2022-08-20 09.16.05

让我们来实现叭!

步骤一:获取本机对应公钥

如果已经有了,可以执行如下命令进行获取

cat ~/.ssh/id_rsa.pub

如果提示没有,可以执行如下命令进行创建,一直回车就好

ssh-keygen -t rsa

步骤二:将公钥复制到云服务器上

这里我们有两个方案,任选一个就好

  • ssh-copy-id 本地直接传输(推荐)
  • 云服务器操作后台配置(以腾讯云为例)
本地直接传输

执行命令ssh-copy-id,本质上其实就是将本机的公钥复制到远程机器的~/.ssh/authorized_keys文件中

ssh-copy-id -i id_rsa.pub -p 22 root@[ip]

image-20211108094235963

云服务器操作后台配置

登录腾讯云服务器管理台,名称任意填写

img

然后进行绑定即可

image-20220425164919543

此时我们就可以做到直接执行ssh root@[ip直接免密登陆了,但我们不希望记忆一堆 ip,希望直接输入别名就可以登陆,那就可以继续下面的操作,更改配置文件,设置远程服务器别名

步骤三:本地 SSH 设置远程服务器别名

  1. 设置远程服务器别名

执行下面命令进行更改对应文件

vi ~/.ssh/config

输入如下内容 ,记得更改自定义部分

Host [别名]
HostName [ip]
Port 22
User root
IdentityFile ~/.ssh/id_rsa
  1. 设置自动 passphrase

执行如下命令,实现将专用密钥添加到ssh-agent的高速缓存中

ssh-add
shell 自动化

这些动作很固化,所以可以使用 shell 进行实现,这样就不用再对着文档一步步走了,而是可以直接执行完成。

新建如下脚本文件,然后执行命令即可

 sudo chmod 777 ./ && sh ./ssh-noAuth-local.sh [别名] [ip]

脚本内容如下

#!/bin/sh
# 本地 SSH 设置远程服务器别名
# 使用方法:sh ./ssh-noAuth-local.sh [别名] [ip]
# 示例:sh ./ssh-noAuth-local.sh fq 124.223.43.155
host=$1
ip=$2
cat >> ~/.ssh/config << EOF
Host ${host}
  HostName ${ip}
  Port 22
  User root
  IdentityFile ~/.ssh/id_rsa
EOFcd ~/.ssh
ssh-copy-id -i id_rsa.pub -p 22 root@${ip} << EOF
Lfq12345
EOF
# 设置自动 passphrase
ssh-add

新开个终端,再试试吧!

这个【新建文件 - 执行】的动作也很麻烦,而且每次用的时候还得自己找,安利下本人的 vscode 插件【weiyi-tools】,其中有个命令【shell】,会弹出要执行的 sh 命令,点击即会执行;推荐理由如下

  1. 省时省力:不需要自己创建、保管脚本啦
  2. 更多工具:所有的个人提效脚本都会放在这个工具里,以图形界面形式支持使用
  3. 扩展性:支持上传自己的 shell 脚本(详见 readme

登陆服务器:vscode 插件 Remote-SSH

经过 ssh 免密登陆配置,我们登陆变得很便捷了,但看着这个小窗口,鼠标变得索然无味,还是很不习惯。查看个日志都得先切目录、再 cat。特别是爬虫项目,出问题的情况太多了,登陆态失效、网络故障、被墙等等等,程序中断异常时候,日志就成了最关键的东西。查看日志的繁琐却让我心烦。

于是想,我能不能搞个本地 shell 呢?【利用 vscode 插件的 node 能力,通过 scp 实时抓取指定服务器路径上的日志,放在本地展示】,理论上是走得通的;正当我想开搞之时,耳旁想起了我的同桌大佬常常嘟囔的一句话

“你想做的,基本上都有人做了,先找现成,再定制;不要无意义造轮子”。

遂去网上查找,果然,vscode 插件 Remote-SSH,可太强大了

  1. 支持无代码式添加 ssh 配置
  2. 支持远程连接服务器并在本地 vscode 中以文件夹形式出现(就和本地打开个文件夹一样,查看日志不在话下)
  3. 支持本地和远端直接传输
  4. 配置特定插件,可以支持 shell 脚本调试、智能提醒

这个可太强大了,所以我自己去写的想法飞到了九霄云外。因此本部分内容只分享如何使用这个工具

介绍完毕,开工!

达到的效果

图形化界面连接远端服务器,以操作本地文件的形式操作远端服务器的文件内容

2022-08-20 10.33.46

步骤一:安装所需 vscode 插件

  1. 安装 Remote-SSH 插件:安装完成会出现 SSH explore
  2. 安装 Shell-format, shellman 插件:方便 shell 编写是智能提示
  3. 安装 Code Runner 插件:右击可以实时运行 shell 脚本

步骤二:连接远程服务器

  • cmd+shift+p 搜索【remote-ssh】 在这里插入图片描述
  • 选择配置文件:这里我们选择【~/.ssh/config】,如果按上文已经配置好了 config,这里直接导入就有选择项了
  • 连接服务器:点击选择项,会自动完成连接

尾声

至此,我们就完成本文目标啦~

1651cbfd336d45bb12a38491cc85061d

参考文档