【发布时间】:2023-03-26 17:40:01
【问题描述】:
我正在尝试从 python 脚本中通过 SSH 连接到另一台主机并运行需要 sudo 的命令。
我可以从 python 脚本 ssh 如下:
import subprocess
import sys
import json
HOST="hostname"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="sudo command"
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
error = ssh.stderr.readlines()
print(error)
else:
print(result)
但我想在 sshing 之后运行这样的命令:
extract_response = subprocess.check_output(['sudo -u username internal_cmd',
'-m', 'POST',
'-u', 'jobRun/-/%s/%s' % (job_id, dataset_date)])
return json.loads(extract_response.decode('utf-8'))[0]['id']
我该怎么做?
另外,我不想在每次运行这个 sudo 命令时都提供 sudo 密码,因为我在新主机的 visudo 末尾添加了这个命令(即上面的 internal_cmd)试图 ssh 进入。但是仍然像这样直接在终端中输入此命令时:
ssh -t hostname sudo -u username internal_cmd -m POST -u/-/1234/2019-01-03
系统提示我输入密码。为什么会这样?
【问题讨论】:
-
尝试引用命令并传递完整路径
ssh -t hostname "sudo -u username /path/to/internal_cmd -m POST -u/-/1234/2019-01-03"...另外,sudoers 行是什么样的? -
如何在 python 中使用 ssh -t?执行 ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND], 使脚本永远运行
-
也引用它不起作用。 sudoers 是这样的:用户名 ALL=NOPASSWD: internal_cmd
-
您的 sudoers 条目不允许输入除单个
-以外的参数,因此它与您传入的内容不匹配,因此会提示输入密码。 -
那我需要做什么?
标签: python linux ssh sudo visudo