使用scp2自动部署文件到windows或者linux(以及windows下安装Bitvise SSH Server)

最近工作中总是需要传文件到linux服务器和局域网的一台windows电脑,总会觉得太繁琐了,因为每次都需要连接打开ftp客户端或者使用finder连接到局域网的windows主机,所以就想能不能使用脚本来完成这个工作。

环境

MacOS 12.6 node 14.18.0

安装scp2

npm i scp2 ora -S

ora是为了执行脚本的时候添加loading效果

传文件到linux服务器

传到linux服务器的过程是比较顺利的,这里直接贴代码

// 由于最新的ora包只能用import的方式引入所以这里用了异步函数
(async function () {
  const { default: ora } = await import("ora");
  const scpClient = require("scp2");
  const path = require("path");
  const fs = require("fs");
  const server = {
    host: "x.x.x.x", // 目标服务器或主机IP
    port: 22, //目标服务器或主机端口 一般默认22 看情况
    username: "uername", //ssh登录用户名
    password: "pawword", //ssh登录密码
    path: "", //目标服务器或主机目录
    // debug: console.log // 可以打印scp2的日志 方便调试
  };
  const distDirectory = "localdir"; // 本地要上传的文件所在文件夹
  const checkFiles = ["xxx.txt", "xxx.js"]; // 这里因为我想当localdir中只包含"xxx.txt", "xxx.js"的时候才执行上传 如果不想校验数组设置为空数组
  const loadingColors = [
    "black",
    "red",
    "green",
    "yellow",
    "blue",
    "magenta",
    "cyan",
    "white",
    "gray",
  ];
  /**
   * 当前路径是否为目录
   * @param path 
   * @returns 
   */
  function isDirectory(path) {
    return fs.statSync(path).isDirectory();
  }
  /**
   * 校验localdir是否符合要求
   * @returns 
   */
  function checkDist() {
    const distPath = path.resolve(__dirname, distDirectory);
    if (!isDirectory(distPath)) {
      return false;
    }
    const files = fs.readdirSync(distPath);
    console.log("\r该目录文件:", files);
    console.log("校验文件:", checkFiles);
    if (!checkFiles.length) {
      return true;
    }
    if (files.length !== checkFiles.length) {
      return false;
    }
    return files.every((file) => checkFiles.includes(file));
  }
  let loading = ora("正在校验文件...");
  loading.start();
  const checkResult = checkDist();
  loading.stop();
  console.log(checkResult ? "文件校验通过" : "文件校验失败");
  if (!checkResult) {
    process.exit();
  }
  loading = ora("正在部署至 " + server.host);
  let counter = 0;
  setInterval(() => {
    counter++;
    loading.color = loadingColors[Date.now() % loadingColors.length];
  }, 1000);
  loading.start();
  scpClient.scp(distDirectory, server, (err) => {
    loading.stop();
    if (err) {
      console.log("部署失败");
      throw err;
    } else {
      console.log("部署成功");
      process.exit();
    }
  });
})();

运行截图

image-20230309222812979

传文件到windows

其他的ftp服务器应该也可以用,当然我猜的,这里使用的是Bitvise SSH Server,基本上算是傻瓜安装

windows上需要下载安装Bitvise SSH Server 官网没找到历史版本在哪下 我用的5.60

  1. 选中accept安装,不选中的话也没办法安装

    image-20230309215623429

  2. 选中standard edition 白嫖万岁

    image-20230309215644253

  3. 期间会自动打开命令行工具执行安装命令,安装完成之后会有弹窗提醒

    image-20230309215820614

  4. 然后选择manage host keys.

    image-20230309215927737

  5. 点击生成key

    image-20230309215950137

  6. 选中ssh-rsa, 点击generate

    image-20230309220013814

  7. 选中刚刚生成的key然后点击employ,然后点击close

    image-20230309220128193

  8. 点击open easy setting

    image-20230309220203511

  9. 配置端口,防火墙这里为了测试方便直接选择any computer,生产环境莫用

    image-20230309220242505

  10. 切换到virtual accounts选项卡,然后点击add添加虚拟账号

    image-20230309220446579

  11. 输入账号名,然后设置账号密码,这个页面都打上勾

    image-20230309220541675

  12. 关掉窗口,保存配置

    image-20230309220612260

  13. 然后开启服务

    image-20230309220631164

  14. 随后就可以使用linux那边的代码 尝试传文件过来,连接或者传文件成功,当前windows主机会收到提醒

    image-20230309220752040

注意事项

  1. 首次安装Bitvise SSH Server的时候并没有执行4-7步生成rsa加密的key,然后执行传文件的代码的时候报错了,调试发现是加密方式报的错。
  2. 代码仅在mac上测试

参考资料

  1. 安装winsshd
  2. Is there a way to expose debug lines during scp2 upload operation in nodejs?
  3. bitvise官网
  4. node-scp2
  5. ora
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值