最近在进行前端开发时遇到了需要通过 SSH 连接到远程服务器的情况,而 npm 上提供的 node-ssh 包解决了这个问题。
本文将详细介绍 node-ssh 的使用方法,包括创建 SSH 连接、执行远程命令、上传和下载文件等操作。
安装
在使用 node-ssh 之前,需要安装它。
通过 npm 安装:
npm install node-ssh
或者通过 yarn 安装:
yarn add node-ssh
创建 SSH 连接
使用 node-ssh 是要先创建一个 SSH 连接,通过这个连接可以执行各种操作。
通过如下代码创建 SSH 连接:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - --- --------- ------------- ----- ------------------- --------- ---------------- ----------- --------------------------- --
其中 your-server-host
是你要连接的远程服务器地址,your-username
是你在该服务器上的用户名,/path/to/your/private/key
是你的私钥文件路径。如果需要密码登录,可以在 connect
方法中传递 password 属性。
执行远程命令
创建了 SSH 连接之后,我们就可以执行远程命令了。
ssh.execCommand('ls') .then(result => { console.log(result.stdout) }) .catch(error => { console.error(error) })
使用 execCommand
方法执行远程命令,接受一个字符串类型的参数,表示要执行的命令。该方法返回一个 Promise 对象,可以通过 then 方法获取命令执行结果和错误信息。
上传和下载文件
在日常开发中,会碰到需要上传或下载文件到远程服务器的情况。node-ssh 也提供了很好的支持。
上传文件:
ssh.putFiles([ { local: '/path/to/local/file', remote: '/path/to/remote/file' } ]).then(() => { console.log('Upload success') })
下载文件:
ssh.getFile('/path/to/remote/file', '/path/to/local/file').then(() => { console.log('Download success') })
putFiles
方法接受一个数组类型的参数,数组中每个元素都包含一个 local 和一个 remote 属性,分别表示本地文件路径和远程服务器上要存储的文件路径。getFile
方法接受两个参数,第一个参数是远程文件路径,第二个参数是本地文件路径。
建立 Promise 链式调用
在实际应用中,常常需要执行多个命令和操作。这时候,可以使用 Promise 链式调用的方式,简化代码。
-- -------------------- ---- ------- ------------- ----- ------------------- --------- ---------------- ----------- --------------------------- ---------- -- - ------ --------------------- -------------- -- - -------------------------- ------ -------------- - ------ ---------------------- ------- ---------------------- - -- ---------- -- - ------------------- --------- ------ ----------------------------------- ---------------------- ---------- -- - --------------------- --------- -------------- -- - -------------------- --
将多个操作通过 Promise 链式调用的方式串连起来。
总结
node-ssh 是一个非常实用的 npm 包,可以在前端开发中轻松连接远程服务器,执行远程命令以及上传和下载文件等常见操作。在使用时需要注意配置私钥文件等细节,尤其要注意服务器安全。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/63937