您的位置 首页 php

CentOS7 – 通过SSH远程运行命令

通过 ssh 远程 运行命令

此配方介绍如何通过Secure shell (SSH)在远程系统上执行一次性命令。 能够在不建立完整交互式会话的情况下运行命令可以很方便,因为您可以避免运行第二个终端; 一切都可以直接从同一命令行完成。

做好准备

此配方需要运行OpenSSH服务器的远程系统和安装了OpenSSH SSH客户端的本地计算机(两者都应默认安装在 CentOS 上)。 这些示例假定远程系统配置了IP地址192.168.56.100。 此外,您还需要远程系统上提供的用户帐户。

如何去做

以下示例显示如何通过SSH从本地系统在远程系统上运行命令:

  • 要远程执行命令,请使用ssh并指定目标系统的主机名或IP地址,后跟命令及其参数:
ssh 192.168.56.100 uname -a
 
  • 要以其他用户身份执行命令,请提供具有远程系统地址的用户名:
ssh tboronczyk@192.168.56.100 id -un
 
  • 如果远程命令需要 sudo ,请使用-t参数提供ssh:
ssh -t 192.168.56.100 sudo mount /mnt
 
  • 使用-X参数转发远程系统的 X11 显示以执行图形程序:
ssh -X 192.168.56.100 gnome-calculator
 
  • 执行复杂命令时使用引号,例如,一系列命令或使用I / O重定向时。 这避免了本地和远程shell之间的歧义:
ssh 192.168.56.100 "tar tvzf archive.tgz > contents.txt"
 
  • 您可以将本地系统的输入传输到从stdin读取的远程命令:
cat foo.txt | ssh 192.168.56.100 "cat > foo.txt"
 

工作原理

ssh主要用于登录远程系统并访问交互式shell,因为很多人可能不知道命令可以在没有shell的情况下远程执行。 本文提供了几个示例,说明如何使用ssh运行远程命令,每个命令都遵循此常规调用模式:

ssh [options] [user@]host command
 

远程主机被接受为ssh远程执行命令后提供的任何内容,如以下两个示例所示。 第一个调用uname来打印有关远程系统的信息,例如内核,处理器和操作系统,第二个运行id以显示当前有效用户ID的用户名:

ssh 192.168.56.100 uname -a
ssh tboronczyk@192.168.56.100 id -un
 

运行这些命令时,ssh不会启动交互式shell,因为它没有理由分配tty /伪终端; 它充当shell本身,并在远程和本地系统之间路由输入和输出。 但是,某些命令要求终端正常运行。 例如,sudo使用终端确保用户密码在键入时不会在屏幕上打印。 没有终端,sudo拒绝运行并报告你必须有一个tty来运行sudo。 我们可以在执行这些命令时提供-t参数来强制ssh分配远程终端资源:

ssh -t 192.168.56.100 sudo mount /mnt
 

-X参数转发X11显示,并允许我们运行图形程序。 该程序看起来好像在我们的本地桌面环境中运行,但实际上它正在远程系统上运行:

ssh -X 192.168.56.100 "gnome-calculator"
 

可以使用X11转发运行图形应用程序

要确保按照您的意图解释调用,您可能需要引用命令。 使用I / O重定向或运行多个命令时尤其如此。 要了解原因,请考虑以下示例:

ssh 192.168.56.100 "tar tvzf archive.tgz > contents.txt"
 

tar输出存档中的文件列表,然后重定向以创建contents.txt文件。 一切都发生在远程系统上远程tar运行,新文件在远程系统上创建。

现在,这是相同的调用,但没有引用:

ssh 192.168.56.100 tar tvzf archive.tgz > contents.txt
 

tar仍然远程执行,但本地shell解释重定向,并在本地系统上创建contents.txt。

可以在两个方向上进行I / O重定向。 也就是说,我们可以将输入从本地系统传输到远程系统的stdin:

cat foo.txt | ssh 192.168.56.100 "cat > foo.txt"
 

在此示例中,cat读取foo.txt,并将内容通过管道传送到远程系统。 在那里,一个远程运行的cat实例将等待读取输入。 当它检测到传输结束时,cat输出它收到的信息,然后重定向到远程系统上创建foo.txt。 从本质上讲,我们只是将foo.txt的副本从本地系统复制到远程系统.

See also

Refer to the following resources for more information on running commands remotely through SSH:

  • The ssh manual page (man 1 ssh)
  • Piping with SSH (
  • Commandlinefu.com SSH commands (

文章来源:智云一二三科技

文章标题:CentOS7 – 通过SSH远程运行命令

文章地址:https://www.zhihuclub.com/153888.shtml

关于作者: 智云科技

热门文章

网站地图