Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将秘密传递给通过SSH启动的程序_Python_Linux - Fatal编程技术网

Python 将秘密传递给通过SSH启动的程序

Python 将秘密传递给通过SSH启动的程序,python,linux,Python,Linux,我正在通过SSH启动一个Python程序,我想向它传递一个秘密 ssh remote python program.py 我控制程序的代码,这样我就可以实现我想要的任何方法。我考虑过以下几种选择: 使用命令行参数 ssh remote python program.py --secret=abc 这将不起作用,因为本地和远程计算机上的任何用户都可以看到使用此参数调用了SSH和程序 使用TCP ssh -L 1234:localhost:1234 remote python progam.py

我正在通过SSH启动一个Python程序,我想向它传递一个秘密

ssh remote python program.py
我控制程序的代码,这样我就可以实现我想要的任何方法。我考虑过以下几种选择:

使用命令行参数

ssh remote python program.py --secret=abc
这将不起作用,因为本地和远程计算机上的任何用户都可以看到使用此参数调用了SSH和程序

使用TCP

ssh -L 1234:localhost:1234 remote python progam.py
程序将在端口1234上侦听,并等待我通过连接发送机密。这也不起作用,因为任何程序都可以连接到端口1234并将垃圾机密传递给
program.py

使用标准DIN

cat secret.txt | ssh remote python program.py
这是可行的,但不幸的是,对于我的用例,stdin已经被用于向程序传递其他数据

我还有其他选择吗?stdin是唯一的方法吗

stdin是唯一的方法吗

如果您不能使用套接字(TCP或UDP)将机密信息传输到
远程
;考虑到您提到的约束条件和您描述问题的方式,stdin似乎是唯一的方法

套接字将为您提供一个文件描述符接口,您可以在该接口上将本地文件写入远程端。由于您无法使用它,
stdin
作为基于消息的应用程序协议的实用选项持续使用。见下文

我还有其他选择吗

是的,你还有很多其他选择。i、 例如,您可以通过创建对象并从
program.py
内部执行
read
/
write
来创建基于消息的协议

类消息:
机密,信息=范围(2)#另请参见:从枚举导入自动,枚举
#https://docs.python.org/3.7/library/enum.html
定义初始化(自我、类型、内容):
self.type=type_
self.content=内容_
msec=Message(Message.SECRET,“此处为SECRET”)
minf=Message(Message.INFO,“在此处清除信息”)

在启动程序之前,使用
scp
secret.txt
复制到目标计算机。@JohnGordon我在哪里复制它,以便只有所述程序可以读取它?您可以使用环境变量
FOO=bar shh…
但这会暴露秘密。您可以将秘密添加到文件中,并对其进行签名,然后将其发送到远程,使用远程上的公钥,您可以验证该秘密是否被篡改,但这不会隐藏该秘密,只需确保它的来源您复制的位置并不重要您真正需要关心的是您应该对该文件授予什么权限。该文件必须仅对运行进程的用户具有读取权限。这不起作用,因为文件描述符在远程端不存在。@Overv您说得对。请参阅我的第二个建议,基于消息的应用程序协议。我将编辑我的答案并删除我提到的部分文件描述符。