侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux rexec命令教程:在远程主机上执行命令的利器(附实例详解和注意事项)

Linux rexec 命令介绍

rexec(remote execute 的缩写),用于在指定的远程 Linux 系统主机上执行命令,向远程 rexec 服务器发出执行命令的请求。rexec 命令提供了一个自动登录的功能,通过检查 $HOME/.netrc 文件,该文件包含了远程主机上使用的用户名和密码。如果没有找到这样的条目,或者系统在安全模式下操作(参见 securetcpip 命令),rexec 命令会提示输入一个远程主机的有效用户名和密码。在这两种情况下,rexec 会导致远程系统上的 rexecd 为用户使用默认的 compat 登录认证方法。rexecd 不会查看远程系统上的 /etc/security/user 文件,以寻找其他的认证方法。您也可以通过指定 -n 参数来覆盖自动登录的功能。

Linux rexec 命令适用的 Linux 版本

rexec 命令适用于大多数 Linux 发行版,如 Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian 等。如果某些 Linux 版本没有预装 rexec 命令,可以通过安装 rsh-client 或 rsh-redone-client 包来解决。例如,在 Debian 或 Ubuntu 上,可以使用以下命令来安装:

[linux@bashcommandnotfound.cn ~]$ sudo apt-get install rsh-client

或者

[linux@bashcommandnotfound.cn ~]$ sudo apt-get install rsh-redone-client

在 RedHat/CentOS 7 上,可以使用以下命令来安装:

[linux@bashcommandnotfound.cn ~]$ sudo yum install rsh

在 RedHat/CentOS 8 上,可以使用以下命令来安装:

[linux@bashcommandnotfound.cn ~]$ sudo dnf install rsh

Linux rexec 命令的基本语法

rexec 命令的基本语法格式如下:

rexec [ -a ] [ -d | -n] [ -i] HostCommand

其中,Host 是指定的远程主机的名称,Command 是要在远程主机上执行的命令,包括任何参数或选项。

Linux rexec 命令的常用选项或参数说明

rexec 命令的常用选项或参数说明如下表所示:

选项或参数说明
-a指定远程命令的标准错误和标准输出是相同的
-d指定在远程主机上执行命令时,将当前目录设置为用户的主目录
-n阻止自动登录,即使在 $HOME/.netrc 文件中有相同的远程主机名的条目
-i指定在远程主机上执行命令时,忽略中断信号

Linux rexec 命令实例详解

下面给出一些 rexec 命令的实例,以帮助您更好地理解和使用该命令。

实例1:在远程主机上执行 date 命令

如果您想在远程主机 host1 上执行 date 命令,并在本地主机上显示输出,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 date

如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 date 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 date 命令的输出。

实例2:覆盖自动登录功能

如果您想覆盖自动登录功能,并在远程主机 host1 上执行 date 命令,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec -n host1 date

该命令会忽略 $HOME/.netrc 文件中的任何条目,而是提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 date 命令的输出。

实例3:在远程主机上执行 ls 命令

如果您想在远程主机 host1 上执行 ls 命令,并显示指定目录的内容,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 ls -l /home/karen

该命令会在远程主机 host1 上执行 ls -l /home/karen 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 ls 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 ls 命令的输出。

实例4:在远程主机上执行 ps 命令

如果您想在远程主机 host1 上执行 ps 命令,并显示所有进程的信息,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 ps -ef

该命令会在远程主机 host1 上执行 ps -ef 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 ps 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 ps 命令的输出。

实例5:在远程主机上执行 ping 命令

如果您想在远程主机 host1 上执行 ping 命令,并测试与另一个主机 host2 的连通性,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 ping -c 4 host2

该命令会在远程主机 host1 上执行 ping -c 4 host2 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 ping 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 ping 命令的输出。

实例6:在远程主机上执行 who 命令

如果您想在远程主机 host1 上执行 who 命令,并显示当前登录的用户,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 who

该命令会在远程主机 host1 上执行 who 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 who 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 who 命令的输出。

实例7:在远程主机上执行 top 命令

如果您想在远程主机 host1 上执行 top 命令,并显示系统的资源使用情况,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 top

该命令会在远程主机 host1 上执行 top 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 top 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 top 命令的输出。

实例8:在远程主机上执行 df 命令

如果您想在远程主机 host1 上执行 df 命令,并显示磁盘的使用情况,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 df -h

该命令会在远程主机 host1 上执行 df -h 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 df 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 df 命令的输出。

实例9:在远程主机上执行 uname 命令

如果您想在远程主机 host1 上执行 uname 命令,并显示系统的信息,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 uname -a

该命令会在远程主机 host1 上执行 uname -a 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 uname 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 uname 命令的输出。

实例10:在远程主机上执行 curl 命令

如果您想在远程主机 host1 上执行 curl 命令,并下载一个网页的内容,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ rexec host1 curl -o index.html https://www.bashcommandnotfound.cn

该命令会在远程主机 host1 上执行 curl -o index.html https://www.bashcommandnotfound.cn 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.netrc 文件中有一个有效的用户名和密码,用于登录远程主机 host1,那么该命令会直接执行,并显示 curl 命令的输出。如果您没有在 HOME/.netrc 文件中有一个有效的条目,那么该命令会提示您输入用户名和密码。在您输入正确的登录信息后,该命令会执行,并显示 curl 命令的输出。该命令会在远程主机 host1 上的当前目录下创建一个名为 index.html 的文件,该文件包含了 https://www.bashcommandnotfound.cn 网页的内容。

Linux rexec 命令的注意事项

使用 rexec 命令时,需要注意以下几点:

  • rexec 命令需要远程主机上运行 rexecd 守护进程,该进程通常在 /etc/inetd.conf 文件中配置。如果远程主机没有启动 rexecd 守护进程,那么 rexec 命令会失败,并显示类似于以下的错误信息:
[linux@bashcommandnotfound.cn ~]$ rexec host1 date
rexec: host1: Connection refused

为了解决这个问题,您需要在远程主机上编辑 /etc/inetd.conf 文件,取消 rexecd 一行的注释,并重启 inetd 服务。例如,在 Debian 或 Ubuntu 上,可以使用以下命令来编辑 /etc/inetd.conf 文件:

[linux@bashcommandnotfound.cn ~]$ sudo nano /etc/inetd.conf

然后,找到以下一行,并删除 # 号:

#exec stream tcp nowait root internal

保存并退出文件,然后使用以下命令来重启 inetd 服务:

[linux@bashcommandnotfound.cn ~]$ sudo service inetd restart

在 RedHat/CentOS 上,可以使用以下命令来编辑 /etc/xinetd.d/rexec 文件:

[linux@bashcommandnotfound.cn ~]$ sudo nano /etc/xinetd.d/rexec

然后,找到以下一行,并将 disable 的值改为 no:

disable = yes

保存并退出文件,然后使用以下命令来重启 xinetd 服务:

[linux@bashcommandnotfound.cn ~]$ sudo service xinetd restart
  • rexec 命令使用明文传输用户名和密码,这可能会导致安全风险。为了避免这个问题,您可以使用更安全的 ssh 命令来代替 rexec 命令。ssh 命令使用加密的方式来连接远程主机,并执行命令。例如,如果您想在远程主机 host1 上执行 date 命令,并在本地主机上显示输出,可以使用以下命令:
[linux@bashcommandnotfound.cn ~]$ ssh host1 date

该命令会在远程主机 host1 上执行 date 命令,并在本地主机上显示输出。如果您在本地主机的 HOME/.ssh 目录中有一个有效的公钥和私钥,用于登录远程主机 host1,那么该命令会直接执行,并显示 date 命令的输出。如果您没有在 HOME/.ssh 目录中有一个有效的密钥对,那么该命令会提示您输入密码。在您输入正确的密码后,该命令会执行,并显示 date 命令的输出。

  • rexec 命令可能会遇到 bash: rexec: command not found 的错误,这表示您的系统没有安装 rexec 命令。为了解决这个问题,您需要按照上面的 Linux rexec 命令适用的 Linux 版本 一节的方法,安装 rsh-client 或 rsh-redone-client 包,以获取 rexec 命令。
0

评论区