有一天,我正在测试如何在 将文件或目录复制到多个位置和系统时保持完整的文件权限。当我想检查远程系统上的文件权限时,我必须通过 SSH 登录它并检查属性。从远程系统多次登录和注销的过程让我有点烦,我想,如果我可以在远程 Linux 系统上通过 SSH 执行命令就好了。 幸运的是,在浏览了 如果你想知道如何本地运行远程系统上运行命令或脚本,而不登录到远程系统,下面的内容会告诉你如何做。 1、通过 SSH 在远程 Linux 系统上执行命令从本地系统通过 SSH 在远程系统上运行命令或脚本的典型方法是: $ ssh 允许我给你们举几个例子: 1.1、通过 SSH 在远程系统上运行单个命令假设你想要 。为此,只需运行:
这里,
示例输出: 看到没?我并没有实际登录到远程系统,但通过 SSH 在远程系统上执行了 你还可以像下面这样用引号指定命令。 $ ssh sk@192.168.225.22 'uname -a' 或者,
如果你已经 更改了 SSH 协议的默认端口,只需使用 $ ssh -p 2200 sk@192.168.225.22 uname -a 1.2、通过 SSH 在远程主机上执行多个命令你还可以在远程主机上运行多个命令,方法是将它们放在引号中。
或者: $ ssh sk@192.168.225.22 'uname -r ; lsb_release -a' 上面的命令将显示我的 Ubuntu 服务器的内核版本和发行版详细信息。 示例输出: 正如一位读者在下面的评论部分提到的那样,你应该用引号指定多个命令。如果不使用引号,第一个命令将在远程系统上执行,第二个命令将仅在本地计算机上执行。整个带引号的命令将按预期在远程计算机上运行。
1.3、通过 SSH 在远程机器上调用有 sudo 权限的命令有些命令需要
示例输出: 注意到了吗?我在上面的命令中使用了 另外,我输入了两次密码。第一次是远程用户的密码,以便从本地系统通过 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 在远程系统上运行本地脚本让我们在本地系统上创建一个简单的脚本来显示关于远程系统的发行版名称、包管理和基本细节等。
添加以下行: #!/bin/bash#Name: Display System Details#Owner: OSTechNIx#----------------------------echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel* 按下 现在,通过 SSH 命令在远程系统上运行这个脚本:
示例输出: 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./'SUPPORT_URL='https://help./'BUG_REPORT_URL='https://bugs./ubuntu/'PRIVACY_POLICY_URL='https://www./legal/terms-and-policies/privacy-policy'VERSION_CODENAME=bionicUBUNTU_CODENAME=bionic 如果你没有在上面的命令中指定 1.5、将远程主机的命令输出保存到本地主机如果你希望与支持团队或同事共享远程系统上运行的命令输出,那么这非常有用。 以下命令将通过 SSH 在远程系统运行
然后,你可以通过使用 $ cat diskusage.txt 4.0K ./.profile4.0K ./.gnupg/private-keys-v1.d8.0K ./.gnupg76K ./data/image.jpg128K ./data/file.pdf20K ./data/text.docx5.9M ./data/audio.mp36.1M ./data0 ./.sudo_as_admin_successful4.0K ./pacman?inline=false4.0K ./.bash_logout4.0K ./.wget-hsts4.0K ./.bash_history0 ./.cache/motd.legal-displayed4.0K ./.cache4.0K ./deb-pacman_1.0-0.deb4.0K ./.bashrc6.2M . 1.6、配置 SSH 密钥认证,避免输入密码如果你经常在远程系统上运行命令,你可能需要配置基于 SSH 密钥的身份验证,以便每次跳过密码输入。更多细节可以在以下链接中找到。
配置了基于 SSH 密钥的认证后,我们可以通过 SSH 在远程机器上执行命令,从而不需要输入密码:
2、通过 sshpass 在远程机器上运行命令如果你不想配置基于 SSH 密钥的身份验证,你可以使用 2.1、什么是 sshpass?
SSH 使用直接 TTY 访问来确保密码确实是由交互式键盘用户发出的。 2.2、在 Linux 中安装 sshpass在许多 Linux 发行版的默认仓库中都有 $ sudo apt install sshpass 2.3、通过 SSH 和 sshpass 在远程机器上执行命令
警告:所有这些方法都是高度不安全的。所有系统用户都可以通过 让我们看看每种方法的示例。 将密码作为参数提供将密码作为参数提供,使用
示例输出: $ sshpass -p ubuntu ssh ostechnix@192.168.1.30 uname -a 其中,
示例输出:
密码作为环境变量提供在这个方法中,我们声明一个名为 $ SSHPASS=ubuntu sshpass -e ssh ostechnix@192.168.1.30 uname -a 从文本文件中读取密码使用
现在,将密码文件传递给带有 $ sshpass -f mypassword.txt ssh ostechnix@192.168.1.30 uname -a 总结在本教程中,我们学习了一些通过安全的网络连接在远程计算机上调用命令或程序的方法。在所有的方法中, via: https:///execute-commands-on-remote-linux-systems-via-ssh/ |
|
来自: lifebegins40s > 《linux》