rsh, remsh, remote_shell - 远程 shell
rsh [-n] [-a] [-K] [-PN | -PO] [-x] [-f | -F] [-l username] [-k realm] hostname command
rsh hostname [-n] [-a] [-K] [-PN | -PO] [-x] [-f | -F] [-l username] [-k realm] command
remsh [-n] [-a] [-K] [-PN | -PO] [-x] [-f | -F] [-l username] [-k realm] hostname command
remsh hostname [-n] [-a] [-K] [-PN | -PO] [-x] [-f | -F] [-l username] [-k realm] command
hostname [-n] [-a] [-PN | -PO] [-x] [-f | -F] [-l username] [-k realm] command
rsh 实用程序会连接到指定的 hostname,并执行指定的 command。rsh 会将其标准输入复制到远程命令,将远程命令的标准输出复制到其标准输出,并将远程命令的标准错误复制到其标准错误。中断、退出和终止信号将传播到远程命令。rsh 通常在远程命令终止时终止。
用户可选择采用 Kerberos V5 进行验证的安全 rsh 会话。此外也可以对网络会话通信进行加密。rsh 会话可使用以下 Kerberos 特定选项来执行 Kerberos 验证:–a、–PN 或 –PO、–x、–f 或 –F 以及 –k realm。上述部分选项(–a、–x、–PN 或 –PO 以及 –f 或 –F)也可以在 krb5.conf 的 [appdefaults] 部分中指定。这些选项的用法及其预期行为将在下面的“选项”部分中讨论。使用 Kerberos 验证时,帐户授权将由 krb5_auth_rules 中的规则控制。如果此授权失败,则仅当在命令行上显式使用 –PO 选项或者在 krb5.conf 中指定了该选项时,才会回退到使用 rhosts 的常规 rsh 会话。此外,–PN 或 –PO、–x、–f 或 –F 以及 –k realm 选项只是 –a 选项的超集。
如果省略了 command,而非执行单一命令,那么 rsh 将使用 rlogin(1) 登录远程主机。
rsh 不会返回 command 的退出状态代码。
不带引号的 Shell 元字符将在本地计算机上解释,而带引号的元字符将在远程计算机上解释。请参见“示例”部分。
如果特定用户的登录 shell 的初始化文件(.cshrc 等)中并无语言环境设置,rsh 将始终在 “C” 语言环境(而非远程计算机的缺省语言环境)中执行命令。
命令会以未加密的形式发送至远程系统。所有后续的网络会话通信都会被加密。请参见 –x。
支持以下选项:
使用 username(而非本地用户名)作为远程用户名。如果未使用此选项,远程用户名将与本地用户名相同。
将 rsh 的输入重定向到 /dev/null。有时需要使用此选项来避免 rsh 与调用它的 shell 之间的不良交互。例如,如果在运行 rsh 时在后台调用了另一个 rsh,而未将其输入重定向到终端以外,则将发生阻塞,即使远程命令并未执行读取操作。–n 选项可防止这一问题。
远程 shell 的类型(sh、rsh 或其他)将由远程系统上 /etc/passwd 文件中的用户条目决定。
支持下列操作数:
要在指定的 hostname 上执行的命令。
rsh 和 remsh 命令支持 IPv6。请参见 ip6(4P)。Kerberos V5 验证目前不支持 IPv6。
主机名将在 hosts 数据库(包含在 /etc/hosts 文件和/或 Internet 域名数据库中)中提供。每台主机都有一个正式名称(数据库条目中的第一个名称),也可以有一个或多个别名。正式主机名或别名可通过 hostname 给定。
如果执行 rsh 的初始文件名不是 rsh,则 rsh 将使用此名称作为其 hostname 参数。这可让您创建一个指向 rsh 的符号链接,当执行该链接时,将对该主机调用远程 shell。通过创建一个目录并使用常用主机名的符号链接进行填充,然后在 shell 搜索路径中包含该目录,可以运行 rsh(向 shell 中键入 hostname)。
如果使用基名 remsh 来调用 rsh,那么 rsh 将检查是否存在文件 /usr/bin/remsh。如果该文件存在,则 rsh 将像 remsh 是 rsh 的别名一样进行操作。如果 /usr/bin/remsh 不存在,那么 rsh 的操作行为就像 remsh 是主机名一样。
对于 Kerberos rsh 会话,每个用户都可在其起始目录中的 .k5login 文件中拥有一个专用验证列表。此文件中的每一行均应包含一个 principal/instance @realm 格式的 Kerberos 主体名称。如果存在 ~/.k5login 文件,则当且仅当发起方用户通过了该 ~/.k5login 文件中所指定的某个主体的验证时,才会授予其对该帐户的访问权限。否则,当且仅当用户的已验证主体名称可以使用 authenticated-principal-name -> local-user-name 映射规则映射至本地帐户名称时,才会授予发起方用户对该帐户的访问权限。.k5login 文件(用于访问控制)在 Kerberos 验证完成后才生效。
对于非安全 rsh 会话,每个远程计算机可拥有名为 /etc/hosts.equiv 的文件,其中包含一个与其共享用户名的可信主机的名称列表。在本地计算机和远程计算机上拥有相同用户名的用户可从远程计算机的 /etc/hosts.equiv 文件中所列的计算机执行 rsh 操作。各个用户可在其起始目录中使用 .rhosts 文件建立一个效果类似的专用列表。此文件中的每一行都包含两个名称:主机名和用户名(用空格隔开)。该条目允许登录到该主机且具有该用户名的用户以远程用户身份使用 rsh 访问远程计算机。如果远程计算机上的 /etc/hosts.equiv 文件中不含该本地主机的名称,且远程用户的 .rhosts 文件中也不含该本地用户名和主机名,访问会被拒绝。/etc/hosts.equiv 和 .rhosts 文件中所列的主机名必须为列在 hosts 数据库中的正式主机名;在这些文件中不能使用别名。
如果可信用户的帐户被锁定,则无法使用 rsh 以该可信用户的身份从可信主机登录。
如果远程计算机拒绝访问,rsh 不会提示输入口令,除非省略了 command 参数。
以下命令会将远程文件 lizard.file 从计算机 lizard 附加到计算机 example 上的文件 example.file:
example% rsh lizard cat lizard.file >> example.file
以下命令会将计算机 lizard 上的文件 lizard.file 附加到文件 lizard.file2(也驻留在计算机 lizard 上)中:
example% rsh lizard cat lizard.file ">>" lizard.file2
将返回以下退出值:
成功完成。
出现错误。
Internet 主机表
可信的远程主机和用户
系统口令文件
包含允许访问的 Kerberos 主体的文件
Kerberos 配置文件
有关下列属性的说明,请参见 attributes(7):
|
on(1)、rlogin(1)、ssh(1)、telnet(1)、vi(1)、ip6(4P)、hosts(5)、hosts.equiv(5)、attributes(7)、 in.rshd(8)
将系统列在 hosts.equiv 中时,它必须具有与本地安全相当的安全性。将不安全的系统列在 hosts.equiv 中可能会危及整个系统的安全性。
您无法运行交互式命令(如 vi(1))。如果您希望进行此操作,请使用 rlogin。
停止信号仅停止本地 rsh 进程。这无疑是错误的,但是目前很难修复,其原因过于复杂,以致于无法在此处加以解释。
不会将当前本地环境传递到远程 shell。
有时出于某些原因需要使用 –n 选项。例如,命令:
example% rsh somehost dd if=/dev/nrmt0 bs=20b | tar xvpBf −
将 shell 置于异常状态。很明显,tar 进程将在 rsh 进程之前终止。接着,rsh 命令试图写入“已损坏的管道”,而且与 shell 争用标准输入,而不是简单地终止。调用 rsh 时使用 –n 选项可避免此类事件。
此错误仅在 rsh 位于管道开头且未读取标准输入时出现。如果 rsh 实际上需要读取标准输入,请勿使用 –n 选项。例如:
example% tar cf − . | rsh sundial dd of=/dev/rmt0 obs=20b
不会产生该错误。如果您要在此类情形中使用 –n 选项,则 rsh 将错误地从 /dev/null(而非管道中)进行读取。
对于大多数目的,应首选 ssh(1) 而非 rsh。