关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

如何通过SSH远程连接Linux系统,并执行命令

发布时间:2022/11/23 15:00:06
香港云服务器

如果你想知道如何本地运行远程系统上运行命令或脚本,而不登录到远程系统,下面的内容不念会告诉你如何做。

1、通过 SSH 在远程 Linux 系统上执行命令

从本地系统通过 SSH 在远程系统上运行命令或脚本的典型方法是:

$ ssh

允许我给你们举几个例子:

1.1、通过 SSH 在远程系统上运行单个命令

假设你想要 。为此,只需运行:

$ ssh sk@192.168.225.22 uname -a

这里,

  • sk是远程系统的用户名,
  • 192.168.225.22是远程系统的 IP 地址,
  • uname -a是我想在远程系统上运行的命令。

示例输出:

image.pngSSH远程Linux

看到没?我并没有实际登录到远程系统,但通过 SSH 在远程系统上执行了 uname命令,并在本地系统的终端上显示了输出。

你还可以像下面这样用引号指定命令。

$ ssh sk@192.168.225.22 "uname -a"

或者,

$ ssh sk@192.168.225.22 'uname -a'

如果你已经 更改了 SSH 协议的默认端口,只需使用-p参数指定它。

$ ssh -p 2200 sk@192.168.225.22 uname -a

1.2、通过 SSH 在远程主机上执行多个命令

你还可以在远程主机上运行多个命令,方法是将它们放在引号中。

$ ssh sk@192.168.225.22 "uname -r && lsb_release -a"

或者:

$ ssh sk@192.168.225.22 "uname -r ; lsb_release -a"

上面的命令将显示我的 Ubuntu 服务器的内核版本和发行版详细信息。

示例输出:

image.pngSSH远程Linux

正如一位读者在下面的评论部分提到的那样,你应该用引号指定多个命令。如果不使用引号,第一个命令将在远程系统上执行,第二个命令将仅在本地计算机上执行。整个带引号的命令将按预期在远程计算机上运行。

提示:了解&&;在命令中的区别:

&&操作符只有在第一个命令成功时才执行第二个命令。

示例:

sudo apt-get update && sudo apt-get upgrade

在上述示例中,如果第一个命令成功,才会执行 sudo apt-get upgrade。否则,它将不会运行。

;操作符会执行第二个命令,无论第一个命令是成功还是失败。

示例:

sudo apt-get update ; sudo apt-get upgrade

在上述示例中,即使第一个命令失败,sudo apt-get upgrade也会执行。

1.3、通过 SSH 在远程机器上调用有 sudo 权限的命令

有些命令需要 sudo权限才能运行。例如,以下命令将在我的远程系统上安装apache2

$ ssh -t sk@192.168.225.22 sudo apt install apache2

示例输出:

image.pngSSH远程Linux

注意到了吗?我在上面的命令中使用了 -t标志,我们需要使用它来强制进行伪终端分配。它用于在远程机器上执行任意基于屏幕的程序,这非常有用。例如,在实现菜单服务时。

另外,我输入了两次密码。第一次是远程用户的密码,以便从本地系统通过 SSH 访问远程系统,第二次是为了向远程用户赋予 sudo 权限,以便安装应用程序(在本例中为 apache2)。

让我们用以下命令检查 Apache 服务是否正在运行:

$ ssh -t sk@192.168.225.22 sudo systemctl status apache2sk@192.168.225.22's password: [sudo] password for sk: ● apache2.service - The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)Drop-In: /lib/systemd/system/apache2.service.d└─apache2-systemd.confActive: active (running) since Thu 2019-12-19 11:08:03 UTC; 52s agoMain PID: 5251 (apache2)Tasks: 55 (limit: 2318)CGroup: /system.slice/apache2.service├─5251 /usr/sbin/apache2 -k start├─5253 /usr/sbin/apache2 -k start└─5254 /usr/sbin/apache2 -k startDec 19 11:08:03 ubuntuserver systemd[1]: Starting The Apache HTTP Server...Dec 19 11:08:03 ubuntuserver apachectl[5227]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 2409:4072:51f:a1b6:a00:27ff:fDec 19 11:08:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.

同样的,我们可以通过 SSH 在本地系统上运行远程系统上的任何命令或脚本。

1.4、通过 SSH 在远程系统上运行本地脚本

让我们在本地系统上创建一个简单的脚本来显示关于远程系统的发行版名称、包管理和基本细节等。

$ vi system_information.sh

添加以下行:

#!/bin/bash#Name: Display System Details#Owner: OSTechNIx#----------------------------echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel*

按下 ESC键,输入:wq保存退出。

现在,通过 SSH 命令在远程系统上运行这个脚本:

$ ssh sk@192.168.225.22 'bash -s'

示例输出:

sk@192.168.225.22's password: /etc/debian_version /etc/lsb-release /etc/os-releasebuster/sidDISTRIB_ID=UbuntuDISTRIB_RELEASE=18.04DISTRIB_CODENAME=bionicDISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"NAME="Ubuntu"VERSION="18.04.2 LTS (Bionic Beaver)"ID=ubuntuID_LIKE=debianPRETTY_NAME="Ubuntu 18.04.2 LTS"VERSION_ID="18.04"HOME_URL="https://www.ubuntu.com/"SUPPORT_URL="https://help.ubuntu.com/"BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"VERSION_CODENAME=bionicUBUNTU_CODENAME=bionic

如果你没有在上面的命令中指定 bash -s,你将获得远程系统的详细信息,但伪终端不会被分配。

1.5、将远程主机的命令输出保存到