ssh2包介绍

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

说明:ssh2模块即openssh协议的客户端实现,因此我们平时ssh命令能做到/不能做到的,ssh2等价

常用方法

  1. connect-建立连接

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

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

  2. con.shell

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

  3. con.exec

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

  4. httpAgent

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

  5. sftp

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

在使用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下的基本操作就这些了

相关文档