可交互式的 ssh 批量执行命令客户端 hss

MIT
C/C++
跨平台
2017-11-14
jncpp

概述

hss是一款可交互式的ssh批量执行命令的客户端,交互输入模式基于libreadline实现,使你能像操作bash一样地输入需要执行的命令,同时也支持命令搜索,历史命令纪录等。并且工具支持在输入命令时,按一下tab键,即可根据远程服务器的信息,进行文件路径和执行命令补全。另外命令的执行是异步的,无需等待一台机器命令执行完成才执行下一台的ssh操作,可支持同时操作数百台服务器。

hss还支持插件扩展,可通过Esc键将运行模式从remote切换到inner,在这里可处理一些批量操作:批量上传下载文件、动态增加删除机器、设置程序运行时的配置等,更多的有趣的功能可能将在后续版本逐渐添加。

预览

Usage: hss [-f hostfile] [-o file] [-u username] [command]

Options:
  -f, --file=FILE           file with the list of hosts or - for stdin
  -H, --host                specifies a host option, support the same options as the ssh command
  -c, --common              specify the common ssh options (i.e. '-p 22 -i identity_file')
  -u, --user                the default user name to use when connecting to the remote server
  -o, --output=FILE         write remote command output to a file
  -l, --local               enable local running mode
  -v, --verbose             be more verbose
  -V, --version             show program version
  -h, --help                display this message
  • 使用效果图如下:

安装

  • 安装依赖

## on MacOS
brew install readline

## on CentOS
yum install readline-devel

## on Ubuntu / Debian 
apt-get install libreadline6-dev
  • 编译&安装

make && make install

指南

hss的实现原理是对每个host,直接调用本地的ssh命令去执行服务器操作,然后再通过进程间通信将执行结果返回给终端。

故此hss支持所有的ssh命令的参数选项。以下是hostfile示例文件:

192.168.1.1
-p 2222 root@192.168.1.2
-p 2222 -i ~/.ssh/identity_file root@192.168.1.3
-p 2222 -oConnectTimeout=3 root@192.168.1.4

连接上述机器的命令如下:

# 指定配置文件的方式
hss -f hostfile

# 管道方式,这里必须指定需要执行的命令
cat hostfile | hss -f - 'date'

# 通过传参的方式
hss -H '192.168.1.1' -H '-p 2222 root@192.168.1.2' -H '-p 2222 -i ~/.ssh/identity_file root@192.168.1.3' -H '-p 2222 -oConnectTimeout=3 root@192.168.1.4'

hss命令本身也支持透传参数到ssh命令,,比如指定了-c '-oConnectTimeout=3',那么对于没有配置超时时间的,将用该值作为超时设置。

inner模式

通过Esc可将运行模式从默认的remote切换到inner,inner模式下支持的命令都是程序内部实现的(可参考command目录),目前支持以下几种:

  • help

    列出inner命令列表

  • upload

    Usage: upload <local_path> <remote_path>

    将本地文件上传到各个服务器对应路径

  • download

    Usage: download <remote_path> <local_path>

    将各个服务器指定路径的文件下载到本地(最终每个下载的本地文件都将追加host后缀以作区分)

  • config

    Usage: config <command>
    
    Commands:
      get    all|<config>       : get config
      set    <config> [value]   : set config
    
    Config:
      output <filename>         : redirect output to a file. stdout is used if filename is '-'
      common-options <filename> : common ssh options

    配置管理,可get/set程序运行的一些配置,比如可通过config set output a.txt,将后面remote模式下的命令执行结果都重定向输出到a.txt文件中,需要重新输出到终端,则使用config set output复原

  • host

    Usage: host <command>
    
    Commands:
      list               : list all ssh slots
      add <ssh_options>  : add a ssh slot
      del <ssh_host>     : delete special ssh slot

    host管理,可动态增加或删除需要连接的远程host

readline使用

可交互式的命令输入,基于libreadline实现,支持远程命令补全,远程文件路径补全,历史命令保存,历史命令搜索,快捷移动等

  • 输入的历史命令保存在~/.hss_history文件中

  • 远程命令和文件路径补全,数据信息来自于第一个host连接

  • 进行文件路径补全时,需要当前单词的首字符是/~.才可提示补全

  • 对于是符号链接的目录,路径补全时会提示以@结尾,目前还没找到好的解决办法

以下列举一些简单的快捷命令(更多命令参考readline说明

C-a       Move to the start of the line.
C-e       Move to the end of the line.
M-f       Move forward a word, where a word is composed of letters and digits.
M-b       Move backward a word.

C-l       Clear the screen, reprinting the current line at the top. 
C-u       Kill backward from the cursor to the beginning of the current line.
C-w       Kill the word behind point, using white space as a word boundary.

C-r       Search backward starting at the current line and moving up through the history as necessary.

下版本方向

  •  inner多层级命令补全

  •  upload/download文件路径补全

  •  解决链接目录补全显示@结尾的问题

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

ACTUONIX L12-50-210-12-I

ELCO EC88P28-H6PR-1024 Elco Industrie Automation EC88P28-H6PR-1024 ELCO EC88P30-P6PR-1024 Elco Industrie Automation EC88P30-P6PR-1024 Elco "EC88P28-H6PR-1024 Hollow shaft increm...

08/09 09:07
0
0
安装biee报错:INST-08020:在HSS_COMPONENT表中找到一个或多个条目

INST-08020:在HSS_COMPONENT表中找到一个或多个条目

2015/04/25 13:46
59
0
Solr笔记四之Solrj创建索引和搜索的一般步骤

在solrj中创建索引的一般步骤: 1)创建一个SolrServer对象,SolrServer用于管理索引 2)创建SolrInputDocument对象,即文档对象,并且向文档对象添加字段 3)利用SolrServer对象的add方法添...

2014/09/24 13:57
30
0
Solr笔记四之Solrj创建索引和搜索的一般步骤

在solrj中创建索引的一般步骤: 1)创建一个SolrServer对象,SolrServer用于管理索引 2)创建SolrInputDocument对象,即文档对象,并且向文档对象添加字段 3)利用SolrServer对象的add方法添...

2014/09/24 13:56
145
0
第三方注册

第三方注册 一些AS业务服务想了解终端的注册状态,针对这种需求,需要在HSS建立如下表中的IFC过滤规则,当终端在S-CSCF上注册成功后,S-CSCF从HSS上下载用户的服务信息(包含IFC过滤规则),...

2014/07/31 09:57
75
0
第一天开通博客,分享点自己的东西

如何利用poi将ppt,pptx转换为HTML 大部分内容是参考网上的,还有一部分是自己写的,毕竟是忙了很长时间,分享下劳动成果,代码很简单,主要思路是将ppt或者pptx,解析成图片,然后拼装成htm...

2016/09/20 14:42
12
0
系统服务创建和服务-win32汇编完整版

.386 .model flat, stdcall option casemap :none ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 文件定义 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...

2016/06/20 09:37
17
0
NGN学习笔记5——IMS技术

1.移动网络的发展--引子 20世纪80年代,商业性移动通信网络得到发展 第一代移动通信系统:TACS、NMT等模拟系统 第二代移动通信系统:GSM、IS-95、DECT、IS-136等数字系统,目前建设的2G移动网...

2010/05/31 10:37
2.2K
0
SCEF引入需求分析及部署应用【转】

【摘 要】传统核心网络的竖井式架构及网络功能定位导致了业务与能力紧耦合,各网元对网络能力的封装已无法应对OTT竞争及未来业务丰富多样化的需求。根据网络能力开放的多种实际应用需求,结合...

2018/12/20 23:14
1
0
Running Modetest to Test Your DRM Display Driver Once you finish the DRM(Direct Rendering Manager)

Running Modetest to Test Your DRM Display Driver Once you finish the DRM(Direct Rendering Manager) driver, you will need to run the modetest to test your driver. modetest is a u...

2016/06/20 16:02
72
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部