gpt4 book ai didi

python - ssh-agent ssh-add ok in user not in sudo

转载 作者:行者123 更新时间:2023-12-02 14:21:50 24 4
gpt4 key购买 nike

我创建了一个 SSH-Agent,以便在连接到我的服务器时向 ssh/scp cmd 提供我的 key 。
我还使用命令“expect”编写了一个 SSH-Add 脚本,以便在需要时编写我的释义。

这与我的用户“用户”完美配合。

但是我正在执行一个使用/dev/mem 的 python 脚本,该脚本需要通过 sudo 以 root 身份运行。这个 python 脚本调用另一个 bash 脚本,里面有 ssh 和 scp cmd。
因此,所有这些 cmd 都以 root 身份执行,而我的 agent/ssh-add 不再起作用,继续询问每个文件的释义。

我该如何解决?我不想以 root 身份登录并以 root 身份运行代理。
我尝试了 sudo -u user ssh 但它不起作用(即:需要输入我的释义)

有任何想法吗?

提前致谢,


编辑:我的代码:
需要 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

关于python - ssh-agent ssh-add ok in user not in sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29037501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com