[英]SSHing from within a python script and run a sudo command having to give sudo password
我正在嘗試從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密碼,因為我已經在要嘗試ssh的新主機的visudo末尾添加了此命令(即,來自上面的internal_cmd)成。 但是仍然在直接在終端中像這樣直接輸入以下命令時:
ssh -t hostname sudo -u username internal_cmd -m POST -u/-/1234/2019-01-03
系統提示我輸入密碼。 為什么會這樣呢?
您可以使用-S
標志來傳遞密碼,該標志告訴sudo
從標准輸入中讀取密碼。
echo 'password' | sudo -S [command]
您可能需要嘗試使用ssh命令的方式,但這應該可以滿足您的需求。
警告:您可能已經知道這一點...但是永遠不要將密碼直接存儲在代碼中,尤其是當您計划將代碼推送到類似Github的東西時。 如果您不知道這一點,請考慮使用環境變量或將密碼存儲在單獨的文件中。
如果您不想擔心將sudo密碼存儲在何處,則可以考慮將腳本用戶添加到sudoers列表中,並且僅對要運行的命令進行sudo訪問,並且不需要密碼選項。 請參見sudoers(5)手冊頁。
您可以通過在authorized_keys條目的開頭添加“ command”選項來進一步限制命令訪問。 請參見sshd(8)手冊頁。
如果可以,請禁用ssh密碼身份驗證以僅要求ssh密鑰身份驗證。 請參見sshd_config(5)手冊頁。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.