【问题标题】:How to set up passwordless ssh between two remote machines using python?如何使用 python 在两台远程机器之间设置无密码 ssh?
【发布时间】:2017-09-29 22:15:36
【问题描述】:

涉及的三台电脑是

  • 答:我的桌面
  • B:非 AWS 服务器
  • C:AWS EC2 实例

我想控制从 B 到 C 的数据传输,但我不想将我的 aws 密钥从 A 分发到 B。所以计划是通过在 A 上执行一些代码来设置从 B 到 C 的无密码 ssh .

具体来说,我所做的是

  1. 将 B 的公钥下载到 A 上的某个临时文件中
  2. 将该键附加到 C 的 .ssh/authorized_keys

代码在这里,我之所以使用python是因为这段代码需要处理其他任务,而python比shell脚本更方便

_, path = tempfile.mkstemp()
os.system('scp B:~/.ssh/id_rsa.pub %s' % path) 
cmd = 'cat %s | ssh -o StrictHostKeyChecking=no -i %s %s "cat >> .ssh/authorized_keys"' % (path, my_aws_credential, C)
os.system(cmd)
os.unlink(path)

这是一个可接受的解决方案吗?有更好的方法吗?是否可以不将B的公钥作为文件下载到A?

提前致谢。

【问题讨论】:

  • 如果可能,请使用ssh-copy-id。最好不要重新发明轮子。

标签: python amazon-web-services amazon-ec2 ssh


【解决方案1】:

退后一步,确定目标的范围(如果我误解了事情,请原谅我)。 B & C 之间的通信是 B & C 之间的通信,它可以独立于 A:如果你去掉那个约束,那么它就简化了。

对于 AWS(或 GCP 等),您可以通过 IAM 和角色管理访问控制。因此,如果您通过 IAM 设置 B 和 C 之间的交互,并且具有与 A 和 C 之间不同的角色/服务帐户,那么 B 和 C 之间的通信将根据您的规范进行控制。你的 A 机器仍然可以控制机器 B,但现在它是一个不同的范式 - 控制结构可以是它自己的 ssh 密钥交换(你可以锁定对 B 的传入访问,除了 A),或者你内部的某种 bool 通信协议蟒蛇程序。

结束,首先通过 AWS IAM 在 B 和 C 之间创建您想要的控制结构,然后在 A 和 B 之间创建(独立但“触发”或访问/布尔)协议,您将实现目标。希望对您有所帮助。

【讨论】:

  • 我可以为非 AWS 机器(即 B)担任 IAM 角色吗?
  • 是的。好消息是有很多文档涵盖了这一点 herealso here ...坏消息是有很多文档涵盖了这一点。您肯定必须尝试创建角色,然后分配它们以允许用户/机器连接。还要确保您的防火墙规则允许另一台机器连接。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2019-03-29
  • 2011-06-03
  • 2016-06-15
  • 1970-01-01
  • 2012-05-01
相关资源
最近更新 更多