LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

如何本地运行远程系统上运行命令或程序(组图)

2023年1月15日 115点热度

linux如何执行c程序_windows执行linux程序_crontab 执行c程序

通过安全的网络连接在远程计算机上调用命令或程序。

有一天,我正在测试如何在 将文件或目录复制到多个位置和系统时保持完整的文件权限。当我想检查远程系统上的文件权限时,我必须通过 SSH 登录它并检查属性。从远程系统多次登录和注销的过程让我有点烦小型linux系统,我想,如果我可以在远程 Linux 系统上通过 SSH 执行命令就好了。

幸运的是,在浏览了 ssh命令的手册页后,我找到了一个解决办法。

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

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

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

$ ssh  

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

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

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

$ ssh sk@192.168.225.22 uname -a

这里linux如何执行c程序,

示例输出:

crontab 执行c程序_windows执行linux程序_linux如何执行c程序

看到没?我并没有实际登录到远程系统,但通过 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 服务器的内核版本和发行版详细信息。

示例输出:

windows执行linux程序_crontab 执行c程序_linux如何执行c程序

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

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

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

示例:

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

示例输出:

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

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

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

$ ssh -t sk@192.168.225.22 sudo systemctl status apache2
sk@192.168.225.22's password: 
[sudo] password for sk: 
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d

└─apache2-systemd.conf
Active: active (running) since Thu 2019-12-19 11:08:03 UTC; 52s ago
Main 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 start
Dec 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:f
Dec 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-release buster/sid DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS" NAME="Ubuntu" VERSION="18.04.2 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_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=bionic UBUNTU_CODENAME=bionic

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

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

如果你希望与支持团队或同事共享远程系统上运行的命令输出,那么这非常有用。

以下命令将通过 SSH 在远程系统运行 du -ah,并将输出保存在本地系统的diskusage.txt文件中。

$ ssh sk@192.168.225.22 du -ah > diskusage.txt

然后,你可以通过使用 cat命令或文本编辑器查看diskusage.txt文件来分析磁盘使用细节。

$ cat diskusage.txt 
4.0K ./.profile
4.0K ./.gnupg/private-keys-v1.d
8.0K ./.gnupg

windows执行linux程序_linux如何执行c程序_crontab 执行c程序

76K ./data/image.jpg 128K ./data/file.pdf 20K ./data/text.docx 5.9M ./data/audio.mp3 6.1M ./data 0 ./.sudo_as_admin_successful 4.0K ./pacman?inline=false 4.0K ./.bash_logout 4.0K ./.wget-hsts 4.0K ./.bash_history 0 ./.cache/motd.legal-displayed 4.0K ./.cache 4.0K ./deb-pacman_1.0-0.deb 4.0K ./.bashrc 6.2M .

1.6、配置 SSH 密钥认证,避免输入密码

如果你经常在远程系统上运行命令,你可能需要配置基于 SSH 密钥的身份验证,以便每次跳过密码输入。更多细节可以在以下链接中找到。

Linux 系统下如何配置 SSH 密钥认证

配置了基于 SSH 密钥的认证后,我们可以通过 SSH 在远程机器上执行命令,从而不需要输入密码:

$ ssh sk@192.168.225.22 sudo apt update

2、通过 sshpass 在远程机器上运行命令

如果你不想配置基于 SSH 密钥的身份验证,你可以使用 sshpass实用程序。

2.1、什么是 sshpass?

sshpass是为使用键盘交互密码身份验证模式运行 ssh 而设计的,但它以非交互的方式。简单来说,sshpass提供了非交互式的方式来验证 SSH 会话。

SSH 使用直接 TTY 访问来确保密码确实是由交互式键盘用户发出的。sshpass在一个专用 tty 中运行 SSH,让它误以为从交互用户那里获得了密码。

2.2、在 Linux 中安装 sshpass

在许多 Linux 发行版的默认仓库中都有 sshpass实用程序。例如,在 Debian、Ubuntu 及其衍生版本中,你可以使用下面的命令来安装sshpass:

$ sudo apt install sshpass

2.3、通过 SSH 和 sshpass 在远程机器上执行命令

sshpass可以通过参数接受密码linux如何执行c程序,或者通过环境变量读取密码,也可以从文本文件中读取密码。

警告:所有这些方法都是高度不安全的。所有系统用户都可以通过ps命令看到命令中的密码。不建议在生产中使用这些方法。最好使用基于密钥的身份验证。

让我们看看每种方法的示例。

将密码作为参数提供

将密码作为参数提供,使用 -p选项,如下所示:

$ sshpass -p 

示例输出:

$ sshpass -p ubuntu ssh ostechnix@192.168.1.30 uname -a

其中,

示例输出:

Linux Ubuntu22CT 5.15.60-1-pve #1 SMP PVE 5.15.60-1 (Mon, 19 Sep 2022 17:53:17 +0200) x86_64 x86_64 x86_64 GNU/Linux

密码作为环境变量提供

在这个方法中,我们声明一个名为 SSHPASS的环境变量,用远程环境的密码作为其值。然后我们使用-e标志,如下所示:

$ SSHPASS=ubuntu sshpass -e ssh ostechnix@192.168.1.30 uname -a

从文本文件中读取密码

使用 echo命令在文本文件中追加密码:

$ echo "ubuntu" > mypassword.txt

现在,将密码文件传递给带有 -f标志的sshpass,如下所示:

$ sshpass -f mypassword.txt ssh ostechnix@192.168.1.30 uname -a

总结

在本教程中,我们学习了一些通过安全的网络连接在远程计算机上调用命令或程序的方法。在所有的方法中,sshpass方法是最不安全的,建议用户避免在生产系统中使用它。

via:

作者:sk选题:lkxed译者:MjSeven校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: ssh 命令模式 运行命令
最后更新:2023年1月15日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
ubuntu离线安装软件 鸿蒙OS环境搭建过程中遇到的问题及解决方案 写入数据覆盖的分析与执行 解读Rainbond集群的安装和运维的原理,便于用户搭建Rainbond Linux基础知识:文件描述符、文件指针、索引节点 如何解决Linux下的无线网卡驱动的问题? linux 文件描述符 (师)-unused-fdKernel:2.6.14CPUarchitecture Linux系统下如何搭建SVN服务器,详细说明各配置项的功能 修改软件源文件、UI界面设置换源操作|Ubuntu Ubuntu14.04.2为例进行说明,其它Ubuntu版本与此类似 Linux图形界面用户和Windows用户来说获取系统硬件信息都不算问题 Ubuntu下换内核的过程及详细分析内核操作分析 100篇文章内存管理——内存回收入口 Web站点,utsa,,/usp/为读者提供大量资料 Linux内核源码/内存/文件系统/进程管理/设备 TeXLive和MiKTeX两大主要发行版的镜像配置方法 安全增强式Linux(SELinuxLinux)内核修改和用户空间工具 Ubuntu系统下安装字体和切换默认字体的方法系统 896MB如何转换为物理空间(Linux地址映射的分析) 比较流行的Linux系统图形界面环境-Linux社区创作挑战赛 如何查看Linux硬盘的大小、类型和硬件信息?方法
ubuntu离线安装软件 鸿蒙OS环境搭建过程中遇到的问题及解决方案Android官方网站:OpenHandsetAlliance源码模式:开发源码内核linux中makefile文件 cdeveloper的第21篇原创技术文章建议横屏Makefile简介Fedora17新特色特色说明桌面环境28bata集成了GNOMELinux嵌入式系统智能手机系统的硬件设计Unix或者类Unix文件系统中的每个文件(或者目录)打开U盘什么文件都看不到小编总结了基于嵌入式Linux的智能手机系统软件的设计与实现如何在Linux中使用Firejail运行应用程序访问某个目录基于嵌入式��闹悄苁只�长沙理工大学C语言教程-Qt.12安装教程05-27Linux有7个运行级别(关机,停机模式、DellG3)(Linux基础知识)文件压缩、打包命令解析的Linux操作系统怎样执行?LinuxDNS服务器,如何安装、配置和维护它?AMD2950x+技嘉x399免驱USB网卡,我的无线网卡linux解压gz文件命令 蓝易云香港五网CN2网络压缩比率的测试环境Linux系统中用于管理和控制系统服务的强大工具介绍围绕API创建封装器的开源项目正变得越来越流行主频93.75MHz的MIPS64NECVR4300处理器在N64上运行
回到Linux基础系列之回到Shell系列文章大纲 我试图将从java作业获得的时间信息与linux性能监视工具 Linux入门学习教程:如何一次性执行多个Linux命令 小编:,异常往外发送数据包命令查看发现有程序 在多用户多任务中对每个用户运行环境的设置十分重要 下编程之一种比较笨的方法比较繁琐的执行结果 Linux新建用户、用户组Linux系统的规定 【中信建投】供应MXNTP10系列采用北斗卫星时钟信号 打开U盘什么文件都看不到小编总结了 linux如何用u盘安装系统教程?(linux) (知识点)Linux文件权限详解:执行权限 netstat命令各个端口-u:指明显示显示UDP端口及进程服务 Excel默认不支持Unix格式时间戳,这在导入数据时十分不便 Linux修改一下时区和时间的方法介绍-苏州安嘉 一下Linux系统启动过程 一个系统安装使用手册Alternate版Ubuntu系统U盘安装系统下载 mysql执行sql脚本文件的方法:SQLServerjava能写游戏吗 安装Linux系统都是初学者的噩梦,安装失败也无所谓 《嵌入式C/C++系统工程师实训教程》培训班 掌握Linux基础命令-上海怡健医学系统
标签聚合
linux系统 文件目录 sudo 命令 linux服务器 linux脚本 虚拟机 电脑 软件 命令模式
书籍
课程
技术群
技术干货大合集↓
  • 2023年6月 / 17篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.