ssh2包介绍
开发WebShell时会用到ssh2包,这里介绍下它的使用
说明:ssh2模块即openssh协议的NodeJS版客户端实现。
常用方法
Client
- connect-建立连接
连接支持密码/密钥/交互键盘输入,确定连接成功后就可以做些基本操作了
如果是连接失败,可以开启debug,方便排查失败原因。一般而言,本地终端可以连接上,那么ssh2也一样,因为都是openssh客户端
- con.shell
开启交互Shell,即平时终端中不断输入输出,终端的话,比如直接断连接,长时间不输入,输入exit多种方法均可
3. con.exec
执行命令,比如cd命令,执行完后,该执行直接就结束了,即stream.end
- httpAgent
这里的agent可以实现内网穿透,比如目标机器有个127.0.0.1:80的web服务,那么就可以使用ssh建立的agent穿透访问
- sftp
文件操作的话,推荐使用基于ssh2实现的ssh2-sftp-client
- 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下的基本操作就这些了。