# nexec

## 1 说明:nexec是远程命令接口引擎 ,用于在远程主机执行命令

nexec [-?] [-t term] [-o] [-i] [-l] [-nohup hostname "cmd &"] -e | hostname cmd [args]

如果你不想看下面的臭又长,可以直接看下面示例:

## 2 nexec常用示例

1 在指定主机执行命令

cloudexpress# nexec 10.200.108.92 net user 

2 在当前路径所在的主机执行命令执行命令

cloudexpress# cd //10.200.108.92

10# pwd

//10.200.108.92/c/

10# nexec -e ifconfig 

3 在指定主机上以后台方式执行命令或程序 (适用于需要很多环境变量依赖的情况)

cloudexpress# nexec -nohup 10.200.108.92 "ipconfig &"

4 运行脚本示例

windows上:

nexec 10.200.108.92 cmd /c "c:\startup.bat" 

Linux上:

nexec -u -l 10.200.108.92 su - root -c "sh /etc/startup.sh" 

其实上面这两个例子也是nexec <host> <command>格式,可以根据实际情况进行变换,比如要后台运行脚本则:

nexec -u -l -nohup 10.200.108.92 su - root -c "sh /etc/startup.sh &" 

5 又比如你想修改某台linux机器的密码,则如下执行

nsh -c 'nexec -r -l 10.200.162.230 "echo "root" | passwd --stdin root"'

6 如果包含双引号

nexec -ncq <windows_host> cmd /c 'echo test"test'

注意:如果操作系统为windows2003,当执行wmic命令时,命令会卡住,参考下面方法可成功执行

 nexec -ncq <windows_host> cmd /c 'echo QUIT | wmic csproduct get identifyingnumber'

例子看完了,够用就走开吧

## 3 描述

nexec有两种工作方式

1 显示方式 

语法: *nexec ARG1 ARG2*

第一个参数可以是被执行命令的主机、或者是-e,如果是-e则意味着在当前工作目录所在的主机执行命令。第二个参数就是要远程执行的命令和命令的参数

例如:nexec 10.200.108.92 tasklist /FI "IMAGENAME eq tasklist.exe" 等价于 cd //10.200.108.92;nexec 10.200.108.92 tasklist /FI "IMAGENAME eq tasklist.exe"

2 隐式方式 

被执行的命令已经软连接到nexec,则执行该命令时是隐式方式。执行时,系统自动把要执行的命令<command>解释为nexec <host> <command>执行,其中host由当前程序的工作目录所在的主机所决定。注意:要执行的命令必须是remote_cmds 配置文件中声明过的,否则系统默认在localhost上执行,结果是错误的。怎么定制remote_cmds,请参见以前写的"BSA Network Shell系列-NSH命令"文章。

## 4 命令参数

-e  在当前远程主机执行命令

-i  通知agent以纯交互模式运行,用于一些需要交互的程序(如Solaris /bin/vi 或者AIX的smit)。如果使用这个选项,标准输出和标准错误的消息都将一起显示。不用这个选项,则远程的标准输出和标准错误将写入各自本地的标准输出和标准错误中。仅当远程机的交互式程序无法正常显示时使用这个选项。

-l  模拟一个login shell。该选项尝试启动一个远程程序模拟实际的登录会话。它会根据远程权限设置HOME、LOGNAME、USER环境变量的值。它将初始工作目录设置为有效远程用户的home目录。然后使用有效远程用户的默认shell调用*cmd args* ,并设置执行程序(有效远程用户的默认shell)的 *argv[0]* 为"-"。这是一种被各种shell(如sh,ksh,bash等)理解的表明当前shell是login shell的方法,并以login shell的方式执行初始化脚本(如.profile等)。最终该选项会在 *utmp* 数据库中创建一条记录。utmp数据库的记录可以通过 *who* 命令查看。

注意:该选项仅适用用于远程服务器是类Unix机器,此外,并非所有平台都支持*utmp*。如果*cmd*是在有效远程用户的默认shell执行的,那么nexec将直接执行command而非再次派生新的shell执行。

下面例子阐明了命令是如何执行的(假定默认shell是/bin/ksh)。

Client sends ’nexec -l -e ls -la’

Agent executes ’/bin/ksh -ksh -c "ls -la"

Client sends ’nexec -l -e ksh’

Agent executes ’/bin/ksh -ksh’

-n  忽略标准输入(不从标准输入中读取任何数据)。默认地,nexec会把所有输入的数据发送给远程命令作为标准输入。使用该选项则不再读取标准输入,因此该选项仅用于不需要输入的命令。

-nohup Hostname "cmd &"

在服务器后台执行一个命令,该选项适用于7.0.3及以上版本的agent。

-o  使用旧版本的nexec协议。Release7.0为nexec协议引入了一些同步补丁,使用该选项告诉nexec不使用这些同步补丁。

-r  不对input/output进行自动转码,详细信息参见(国际化问题)节。

-u  使用该选项nexec将把所有命令的输出(stdout/stderr)从目标服务器的本地代码页转换为UTF8。它假定输出是由正确的代码页序列组成,所以随机二进制数可能无法正确转换、无效的and/or 未识别的序列将转换为问号'?'。

-t term  告知nexec忽略 *TERM variable* 的值,并使用 *term* 替代terminal type。

当在windows机器执行**nexec**命令时,命令不能是交互命令,必须是batch(output only)command。

## 5 国际化问题

其中一个问题是,当用户跨多个服务器执行时,这些机器如何在混合的代码页环境中进行有意义的交互。

比如:一个window服务器设置的区域是Japanese、代码页(code page)是CP932,另一台Solaris服务器设置的区域也是Japanese、但代码页是EUC-JP。这时从windows机器上通过nexec在Solaris机器执行命令产生了Japanese输出。这时显示在windows机器上的输出是错误的,是因为windows机器期待CP932的代码序列,但Solaris提供的却是EUC-JP的代码序列。所以输出的结果可能不怎么有用。

为了处理这个问题,nexec现在默认自动进行转码。命令的输出在正常情况下,先在nexec客户端转换为本地代码页,然后显示到到终端/屏幕前。而现在命令产生的输出会先被agent抓取并自动转换为UTF-8,然后再发送给nexec客户端,最终显示在终端上。同样的,nexec抓取的输入(stdin)在发送给agent前也被转换为UTF-8。

由于这个自动转码可能不总是满足需要,使用-r选项会使所有数据设为raw模式,也就是不自动转码。如果遇到乱码,可以使用-r参数测试

需要注意是否有转码问题,未识别的字符会被问号'?'替代。如果不想自动转码,可以使用 *-r* (raw)选项禁用该功能。

## 6 X11(即X Windows)Forwarding

nexec工具通过以下方式自动配置agent抓取X11 流量:

重置**DISPLAY**变量并通过隧道方式把流量转发到发起nexec调用的服务器。这允许你的通过隧道方式安全的转发X11流量,这和其他NSH工具安全功能相同。

## 7 nexec默认支持的命令

Network Shell提供如下预配置的命令:

arp、finger、ifconfig、ipconfig (NT)、mem (NT)、mount、nbtstat (NT)、net (NT)、netstat、nfsstat、ps、size、swap、umount、uptime、who、xterm

## 8 警告

不同操作系统的命令可能不一致,某个参数选项可能在不同平台表现也不统一。比如 *ps* 命令的例子,在BSD、ATT系统的参数选项完全不同。当然某些命令可能在一些主机上也不能用。

由于nexec命令不支持图形界面交互,所以windows平台只支持简单的输入输出命令/程序,需要控制台界面操作的程序会挂起或者功能异常。

## 9 作者

nexec是由Thomas Kraus写的

BSA Network Shell系列-nexec命令的更多相关文章

  1. BSA Network Shell系列-nexec | runcmd | runscript | scriptutil的异同

    说明下nexec.runcmd.runscript.scriptutil的异同 相同点: 四者都可以在远程机器执行命令.或者调用脚本. 不同点: nexec支持NSH命令,可以执行远程机的本地命令(非 ...

  2. BSA Network Shell系列-nsh命令

    nsh nsh命令软链接到zsh,直接运行nsh可进入Network Shell,所有的Network Shell命令都需要运行nsh进入Network Shell执行 1 使用cd命令访问远程主机和 ...

  3. BSA Network Shell系列-scriptutil命令

    scriptutil ## 1 功能概述 scriptutil复制脚本到远程机的某个目录,然后在该目录执行脚本. 它的优点就是脚本是non-NSH的脚本.不支持NSH命令,执行起来的效果和runscr ...

  4. BSA Network Shell系列-redi命令

    redi ## 1 功能概述 redi将输出重定向到一个文件中 ## 2 语法 redi [-?] [-a] filename ## 3 使用示例 1 将输出重定向到隐式路径所在主机的/tmp/hah ...

  5. BSA Network Shell系列-nlogin命令

    nlogin 1 说明 nlogin 是一种通过RSCD Agent的通信的安全远程登录,使用和NSH工具相同的加密协议.可以作为telnet.rlogin或者ssh的替代工具(假如这些端口或协议禁用 ...

  6. BSA Network Shell系列-runcmd/runscript命令

    runcmd和runscript ## 1 功能概述 runcmd/runscript:runcmd在一台或多台机器执行Network Shell命令(单个命令),而runscript执行的是脚本,二 ...

  7. BSA Network Shell系列-通过NSH执行Powershell,VBScript或bat files脚本

    参考:Running Powershell, VBScript, or bat files via NSH 如果你直接在NSH命令行执行的话,可以参考我翻译的下面的东东,如果想运行NSH 脚本作业的话 ...

  8. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  9. Linux Shell系列教程之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

随机推荐

  1. oracle PL/SQL语法基础

    目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有 ...

  2. Proof of Elapsed Time--Hyperledger Sawtooth 共识算法

    这一片文章中我们介绍一下Hyperledger Sawtooth项目中所提出的PoET共识算法, 现有的区块链共识算法大概可以分为两种: Nakamoto consensus:通过乐透的方式选择出一个 ...

  3. python之list

    1.python列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推 序列都可以进行的操作包括索引,切片,加,乘, ...

  4. islider结合react的简单实用

    我用islider都是结合react来使用,主要运用在移动端,做首页轮播图,或者是手机图片预览,左右滑动 首先需要 npm install islider.js --save 让后在jsx文件头部引入 ...

  5. ionic滑动框 ---轮播图(ion-slide-box) 的使用

    1. html : <ion-slide-box auto-play="true" slide-interval=3000 show-pager="false&qu ...

  6. django中数据库操作——in操作符

    django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...

  7. Java入门篇(二)——Java语言基础(上)

    本篇我们开始进入Java的学习,首先在学习如何编写Java语言前要先了解Java程序的基本结构. 一.Java程序的基本结构 一个Java程序的基本结构大体可以分为包.类.main()主方法.标识符. ...

  8. deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch正则化和程序框架 听课笔记

    这一周的主体是调参. 1. 超参数:No. 1最重要,No. 2其次,No. 3其次次. No. 1学习率α:最重要的参数.在log取值空间随机采样.例如取值范围是[0.001, 1],r = -4* ...

  9. strncmp函数——比较特定长度的字符串

    strncmp函数用于比较特定长度的字符串. 头文件:string.h. 语法  int strncmp(const char *string1, const char *string2, size_ ...

  10. [bzoj1242] Zju1015 Fishing Net弦图判定

    弦图判定..MCS算法. 先选一个点,然后每次拿 相邻已选点最多 的未选点. 选完之后判断一下是否是完美消除序列. #include<cstdio> #include<iostrea ...