如何通过ssh将加密的密码从一个脚本传递到另一个脚本?

时间:2019-04-28 20:21:45

标签: python fabric

我正在尝试编写一个微型脚本,该脚本读取本地PC上的凭证文件,然后使用用户名/密码作为参数调用远程计算机上的另一个脚本。我正在使用Fabric2在远程计算机上ssh。一切正常,但是我不想像现在那样以明文形式发送凭证。我希望它尽可能安全,因为我想在生产中实现它。有什么建议吗?

如果我运行ps -ef,最大的问题是在远程服务器上。 grep py我看到用户名/密码都清除为这样的参数:

  

armkreuz 6780 6779 0 15:11? 00:00:00 /usr/bin/python3.6   /home/armkreuz/scripts/test_password.py fname.lname@exmaple.com   test123

.as-console-wrapper { max-height: 100% !important; top: 0; }

1 个答案:

答案 0 :(得分:0)

您应该对此有所担心。因此,不应将密码作为参数。

有几种方法可以通过SSH传递数据

  1. 从stdin中读取它(您的调用脚本必须将详细信息输入到fabric2中)
  2. 从SSH客户端设置环境变量。我不知道fabric2是否支持此功能。但是,无论如何,许多服务器都会限制从客户端接受的环境变量。
  3. 提前在文件中发送详细信息
  4. 在命令中发送数据

您已经找到了发现问题的第四个选项。我自己尚未对此进行测试,但是以下应该可以工作:

conn.run(f"PASSWORD='{password}' /home/armkreuz/scripts/test_password.py {user}")

您可以使用环境变量“ PASSWORD”来代替第二个参数作为密码

这将在命令中发送密码(仍然是选项4),但命令不是将密码作为参数传递,而是作为环境变量传递。因为是在命令中设置的,所以SSH服务器不应阻止它。

这基于服务器外壳程序(Linux / bash)的语法。请注意,这可能不适用于Windows服务器。