如果你想知道如何本地运行远程系统上运行命令或脚本,而不登录到远程系统,下面的内容不念会告诉你如何做。
从本地系统通过 SSH 在远程系统上运行命令或脚本的典型方法是:
$ ssh
允许我给你们举几个例子:
假设你想要 。为此,只需运行:
$ ssh sk@192.168.225.22 uname -a
这里,
sk
是远程系统的用户名,192.168.225.22
是远程系统的 IP 地址,uname -a
是我想在远程系统上运行的命令。示例输出:
看到没?我并没有实际登录到远程系统,但通过 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
你还可以在远程主机上运行多个命令,方法是将它们放在引号中。
$ ssh sk@192.168.225.22 "uname -r && lsb_release -a"
或者:
$ ssh sk@192.168.225.22 "uname -r ; lsb_release -a"
上面的命令将显示我的 Ubuntu 服务器的内核版本和发行版详细信息。
示例输出:
正如一位读者在下面的评论部分提到的那样,你应该用引号指定多个命令。如果不使用引号,第一个命令将在远程系统上执行,第二个命令将仅在本地计算机上执行。整个带引号的命令将按预期在远程计算机上运行。
提示:了解
&&
和;
在命令中的区别:
&&
操作符只有在第一个命令成功时才执行第二个命令。示例:
sudo apt-get update && sudo apt-get upgrade在上述示例中,如果第一个命令成功,才会执行
sudo apt-get upgrade
。否则,它将不会运行。
;
操作符会执行第二个命令,无论第一个命令是成功还是失败。示例:
sudo apt-get update ; sudo apt-get upgrade在上述示例中,即使第一个命令失败,
sudo apt-get upgrade
也会执行。
有些命令需要 sudo
权限才能运行。例如,以下命令将在我的远程系统上安装apache2
。
$ ssh -t sk@192.168.225.22 sudo apt install apache2
示例输出:
注意到了吗?我在上面的命令中使用了 -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 在本地系统上运行远程系统上的任何命令或脚本。
让我们在本地系统上创建一个简单的脚本来显示关于远程系统的发行版名称、包管理和基本细节等。
$ 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
,你将获得远程系统的详细信息,但伪终端不会被分配。
Copyright © 2013-2024 8a.hk All Rights Reserved. 八艾云 版权所有 中山市八艾云计算有限公司 粤ICP备14095776号 粤公网安备 44200002445359号
增值电信业务经营许可证编号:B1-20222012
代理域名注册服务机构:西部数码