Python如何在远程机器执行Shell命令?本文带你学习如何使用 paramiko 库在 Python 中的远程机器上执行 shell 命令和脚本。
你有没有想过在你的 Linux 机器上以远程方式快速执行某些命令?或者你想在你的服务器中定期执行一些代码行来自动化吗?在本教程中,你将学习如何编写一个简单的 Python 脚本来在你的 Linux 机器上远程执行 shell 命令,下面有详细的Python远程执行Shell命令示例。
相关文章: 如何在 Python 中暴力破解 SSH 服务器。
Python如何远程执行Shell命令?我们将使用paramiko库,让我们安装它:
pip3 install paramiko
定义一些连接凭据:
import paramiko
hostname = "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 ==================================================
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 392M 6.2M 386M 2% /run
/dev/sda1 452G 410G 19G 96% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 392M 12K 392M 1% /run/user/131
tmpfs 392M 0 392M 0% /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()
exec_command()方法使用默认 shell(BASH、SH或任何其他)执行脚本并分别返回标准输入、标准输出和标准错误,如果有,我们将从stdout和stderr读取,然后我们关闭SSH连接。
执行上述代码后,在Desktop中创建了一个新文件test_folder并在其中包含一个包含全局$PATH变量的文本文件:
结论
Python如何在远程机器执行Shell命令?如你所见,这对许多场景都很有用,例如,你可能只想通过远程执行 Python 脚本来管理你的服务器,你可以为所欲为!
顺便说一句,如果你想在远程服务器上运行更复杂的作业,你可能需要查看Ansible。
Python如何远程执行Shell命令?你还可以使用Fabric库,因为它是一个高级 Python 库,旨在通过 SSH 远程执行 shell 命令,它构建在Invoke和Paramiko之上。
你可以随意编辑代码,例如,你可能希望使用argparse解析命令行参数。