如何用Python在远程机器上执行Shell命令()

Python如何在远程机器执行Shell命令?本文带你学习如何使用 paramiko 库在 Python 中的远程机器上执行 shell 命令和脚本。
你有没有想过在你的 Linux 机器上以远程方式快速执行某些命令?或者你想在你的服务器中定期执行一些代码行来自动化吗?在本教程中,你将学习如何编写一个简单的 Python 脚本来在你的 Linux 机器上远程执行 shell 命令,下面有详细的Python远程执行Shell命令示例。
相关文章:  如何在 Python 中暴力破解 SSH 服务器。
Python如何远程执行Shell命令?我们将使用paramiko库,让我们安装它:

pip3 install paramiko

定义一些连接凭据:
import paramikohostname = "192.168.1.101" username = "test" password = "abc123"

在上面的代码中,我定义了主机名、用户名和密码,这是我的本地 Linux 机器,你需要根据情况编辑这些变量,或者你可能想像我们一样使用argparse模块进行命令行参数解析通常做这样的任务。
请注意,使用此类凭据连接到 SSH 是不安全的,你可以将 SSH 侦听器守护程序配置为仅接受公共身份验证密钥,而不是使用密码。但是,出于演示目的,我们将使用密码。
执行 Shell 命令Python远程执行Shell命令示例:现在让我们创建一个你希望在该远程机器上执行的命令列表:
commands = [ "pwd", "id", "uname -a", "df -h" ]

在这种情况下,只是输出一些有关操作系统的有用信息的简单命令。
Python如何在远程机器执行Shell命令?下面的代码负责启动SSH客户端并连接到服务器:
# initialize the SSH client client = paramiko.SSHClient() # add to known hosts client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: client.connect(hostname=hostname, username=username, password=password) except: print("[ !] Cannot connect to the SSH Server") exit()

现在让我们遍历刚刚定义的命令并一一执行它们:
# execute the commands for command in commands: print("="*50, command, "="*50) stdin, stdout, stderr = client.exec_command(command) print(stdout.read().decode()) err = stderr.read().decode() if err: print(err)

这是我的结果:
================================================== pwd ================================================== /home/test================================================== id ================================================== uid=1000(test) gid=0(root) groups=0(root),27(sudo)================================================== uname -a ================================================== Linux rockikz 4.17.0-kali1-amd64 #1 SMP Debian 4.17.8-1kali1 (2018-07-24) x86_64 GNU/Linux================================================== df -h ================================================== FilesystemSizeUsed Avail Use% Mounted on udev1.9G01.9G0% /dev tmpfs392M6.2M386M2% /run /dev/sda1452G410G19G96% / tmpfs2.0G02.0G0% /dev/shm tmpfs5.0M05.0M0% /run/lock tmpfs2.0G02.0G0% /sys/fs/cgroup tmpfs392M12K392M1% /run/user/131 tmpfs392M0392M0% /run/user/1000

太棒了,这些命令  在我的 Linux 机器上成功执行了!
执行脚本Python如何远程执行Shell命令?现在你已经知道如何一个一个地执行命令,让我们深入一点并执行整个 shell ( .sh ) 脚本。
考虑这个脚本(名为"script.sh"):
cd Desktop mkdir test_folder cd test_folder echo "$PATH" > path.txt

Python远程执行Shell命令示例:在后SSH连接,而不是为迭代的命令,现在我们看到这个剧本的内容和执行:
# read the BASH script content from the file bash_script = open("script.sh").read() # execute the BASH script stdin, stdout, stderr = client.exec_command(bash_script) # read the standard output and print it print(stdout.read().decode()) # print errors if there are any err = stderr.read().decode() if err: print(err) # close the connection client.close()

【如何用Python在远程机器上执行Shell命令()】exec_command()方法使用默认 shell(BASH、SH或任何其他)执行脚本并分别返回标准输入、标准输出和标准错误,如果有,我们将从stdout和stderr读取,然后我们关闭SSH连接。
执行上述代码后,在Desktop中创建了一个新文件test_folder并在其中包含一个包含全局$PATH变量的文本文件:
如何用Python在远程机器上执行Shell命令()

文章图片

结论Python如何在远程机器执行Shell命令?如你所见,这对许多场景都很有用,例如,你可能只想通过远程执行 Python 脚本来管理你的服务器,你可以为所欲为!
顺便说一句,如果你想在远程服务器上运行更复杂的作业,你可能需要查看Ansible。
Python如何远程执行Shell命令?你还可以使用Fabric库,因为它是一个高级 Python 库,旨在通过 SSH 远程执行 shell 命令,它构建在Invoke和Paramiko之上。
你可以随意编辑代码,例如,你可能希望使用argparse解析命令行参数。

    推荐阅读