【发布时间】:2021-01-10 05:33:10
【问题描述】:
我的 Linux 脚本如下所示,用于 ssh 托管和搜索具有内核更新的补丁更新
for host in `cat patch.csv`
do
echo "Host $host" >> /tmp/patching
ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" $host 'sudo yum check-update | grep "kernel.x86"'>>/tmp/patching
done
现在我正在尝试编写一个与此等效的 python 脚本及其显示错误(无法连接到 ssh)。我尝试使用不起作用的子进程命令 - 它无法获取主机名和公钥错误。
import subprocess
import os
def read_file():
# Read and print the entire file line by line
with open('patch.csv', 'r') as reader:
with open('server_names.txt', 'w') as writer:
for host in reader:
writer.write(host)
p = subprocess.Popen(["ssh -o 'UserKnownHostsFile=/dev/null' -o 'StrictHostKeyChecking=no' host 'sudo yum check-update | grep kernel.x86'"], shell=True, stdout=subprocess.PIPE)
output, err = p.communicate()
print(host)
print("file read done")
read_file()
【问题讨论】:
-
不管怎样,您的原始脚本有许多 shell 脚本陷阱。可能先看看shellcheck.net 对此有何评论。 (尽管用 Python 替换其中的大部分内容可能没有实际意义。)