# 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. K:树、二叉树与森林之间的转换及其相关代码实现

    相关介绍:  二叉树是树的一种特殊形态,在二叉树中一个节点至多有左.右两个子节点,而在树中一个节点可以包含任意数目的子节点,对于森林,其是多棵树所组成的一个整体,树与树之间彼此相互独立,互不干扰,但其 ...

  2. HTML知识点总结之表单元素

    网页不可能是纯静态的,没有任何的交互功能:绝大多数的网站都有表单元素的使用.表单提供了一个浏览者和网站交互的途径,比如用户注册登录,用户留言等功能. form form元素只是一个数据获取元素的容器, ...

  3. 加速scp传输速度

    当需要在机器之间传输400GB文件的时候,你就会非常在意传输的速度了.默认情况下(约125MB带宽,网络延迟17ms,Intel E5-2430,本文后续讨论默认是指该环境),scp的速度约为40MB ...

  4. [转]设置Jupyter-Notebook表格打印多个变量的值

    有一点已经众所周知.把变量名称或没有定义输出结果的语句放在cell的最后一行,无需print语句,Jupyter也会显示变量值.当使用Pandas DataFrames时这一点尤其有用,因为输出结果为 ...

  5. java_web学习(九) PreparedStatement动态参数的引入

    一.PreparedStatement 概述 在数据库的操作过程中,PreparedStatement 对象是一个很不起眼但是记为重要的接口对象,它继承 于Statement,并与之在两方面有所不同: ...

  6. RabbitMQ入门HelloWorld(C#)(翻译)

    介绍 先决条件 本教程假定RabbitMQ已安装并在标准端口(5672)上的本地主机上运行.如果您使用不同的主机,端口或凭据,连接设置将需要调整. 在哪里得到帮助 如果您在阅读本教程时遇到困难,可以  ...

  7. Angular02 通过angular-cli来搭建web前端项目

    利用angular-cli的常见命令: npm i --save 包名   ->  软件依赖    npm i --save-dev 包名     ->  开发依赖    ng new 项 ...

  8. 洛谷 P3377 【模板】左偏树(可并堆)

    洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...

  9. html笔记4

    <html> <body> <p>这是列表标签</p> <ul> <li>xxx</li> </ul> ...

  10. cs231n spring 2017 Python/Numpy基础 (1)

    本文使根据CS231n的讲义整理而成(http://cs231n.github.io/python-numpy-tutorial/),以下内容基于Python3. 1. 基本数据类型:可以用 prin ...