ssh2包介绍

开发WebShell时会用到ssh2包,这里介绍下它的使用

说明:ssh2模块即openssh协议的NodeJS版客户端实现。

常用方法

  1. Client

    1. connect-建立连接

    连接支持密码/密钥/交互键盘输入,确定连接成功后就可以做些基本操作了

    如果是连接失败,可以开启debug,方便排查失败原因。一般而言,本地终端可以连接上,那么ssh2也一样,因为都是openssh客户端

    1. con.shell

​ 开启交互Shell,即平时终端中不断输入输出,终端的话,比如直接断连接,长时间不输入,输入exit多种方法均可

​ 3. con.exec

​ 执行命令,比如cd命令,执行完后,该执行直接就结束了,即stream.end

  1. httpAgent

​ 这里的agent可以实现内网穿透,比如目标机器有个127.0.0.1:80的web服务,那么就可以使用ssh建立的agent穿透访问

  1. sftp

​ 文件操作的话,推荐使用基于ssh2实现的ssh2-sftp-client

  1. Server

​ 创建ssh server

在使用ssh2时,一定会遇到Channel的概念,需要单独说明下

Channel

ssh2下connect是建立一条ssh连接,ssh连接是基于tcp的,而tcp支持多路复用。所以ssh2下这些不同的操作是可以建立在同一个连接下。

交互shell/sftp开启文件操作/exec执行命令,这些都是开启不同的channel,即它们并不相通,比如交互shell中sudo了用户,那么sftp,exec都是无感知的。当然可以复用也就可以不复用,只要走不同的connection即ssh2下的Client,那就不会复用

目标机器里如果想查看ssh连接数,可以走命令netstat -an | grep ':22'

一些问题

cwd可控?

openssh不支持,因此ssh2也就不支持,目前做不到.shell开启会话后在指定CWD,目前唯一的做法是stream.write(cd /var/www\n)。

但坏处是该输入会存在回显问题

写在最后

到此ssh2下的基本操作就这些了。

相关文档