我创建了一个SSH代理,以在连接到服务器时将我的密钥提供给ssh / scp cmd。我还用命令“ expect”编写了一个SSH-Add脚本,以便在需要时编写我的解释。
这与我的用户“ user”完美配合。
但是我正在执行一个使用/ dev / mem的python脚本,该脚本需要通过sudo以root身份运行。这个python脚本调用另一个内部包含ssh和scp cmd的bash脚本。因此,所有这些cmd均以root用户身份执行,而我的agent / ssh-add不再起作用,并不断要求为每个文件提供释义。
我该如何解决?我不想以root用户身份登录并以root用户身份运行代理。我尝试了sudo -u用户ssh,但是它不起作用(即:需要输入我的解释)
有任何想法吗?
在此先感谢Mat
编辑:我的代码:需要sudo的py脚本
#!/usr/bin/env python2.7
import RPi.GPIO as GPIO
import time
import subprocess
from subprocess import call
from datetime import datetime
import picamera
import os
import sys
GPIO.setmode(GPIO.BCM)
# GPIO 23 set up as input. It is pulled up to stop false signals
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#set path and time to create the folder where the images will be saved
pathtoscript = "/home/pi/python-scripts"
current_time = time.localtime()[0:6]
dirfmt = "%4d-%02d-%02d-%02d-%02d-%02d"
dirpath = os.path.join(pathtoscript , dirfmt)
localdirname = dirpath % current_time[0:6] #dirname created with date and time
remotedirname = dirfmt % current_time[0:6] #remote-dirname created with date and time
os.mkdir(localdirname) #mkdir
pictureName = localdirname + "/image%02d.jpg" #path+name of pictures
var = 1
while var == 1:
try:
GPIO.wait_for_edge(23, GPIO.FALLING)
with picamera.PiCamera() as camera:
#camera.capture_sequence(["/home/pi/python-scripts/'dirname'/image%02d.jpg" % i for i in range(2)])
camera.capture_sequence([pictureName % i for i in range(19)])
camera.close()
cmd = '/home/pi/python-scripts/picturesToServer {0} &'.format(remotedirname)
call ([cmd], shell=True)
except KeyboardInterrupt:
GPIO.cleanup() # clean up GPIO on CTRL+C exit
GPIO.cleanup() # clean up GPIO on normal exit
bash脚本:
#!/bin/bash
cd $1
ssh user@server mkdir /home/repulsion/picsToAnimate/"$1" >/dev/null 2>&1
ssh user@server cp "$1"/* /home/repulsion/picsToAnimate/"$1"/ >/dev/null 2>&1
for i in $( ls ); do
scp $i user@server:/home/repulsion/picsToAnimate/"$1"/ >/dev/null 2>&1
done
您将需要通过sudo传递SSH代理环境变量。
为此,您可以运行sudo -E
通过sudo传递所有环境变量。但这可能很危险,因此最好只传递所需的内容。最简单的方法是使用适当的环境变量集sudo
调用env
来调用给定程序:
$ sudo env SSH_AGENT_PID=$SSH_AGENT_PID SSH_AUTH_SOCK=$SSH_AUTH_SOCK my-script
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句