如何使用python在两台远程机器之间设置无密码ssh?

如何使用python在两台远程机器之间设置无密码ssh?,python,amazon-web-services,amazon-ec2,ssh,Python,Amazon Web Services,Amazon Ec2,Ssh,涉及的三台计算机是 我的桌面 B:非aws服务器 C:一个AWSEC2实例 我想控制从B到C的数据传输,但我不想将aws密钥从A分发到B。因此,计划是通过在A上执行一些代码来设置从B到C的无密码ssh 具体来说,我所做的是 将B的公钥下载到A上的某个临时文件中 将该密钥附加到C的.ssh/authorized_密钥中 代码就在这里,我之所以使用python是因为该代码还需要处理其他任务,而且python比shell脚本更方便 _, path = tempfile.mkstemp() os.s

涉及的三台计算机是

  • 我的桌面
  • B:非aws服务器
  • C:一个AWSEC2实例
我想控制从B到C的数据传输,但我不想将aws密钥从A分发到B。因此,计划是通过在A上执行一些代码来设置从B到C的无密码ssh

具体来说,我所做的是

  • 将B的公钥下载到A上的某个临时文件中
  • 将该密钥附加到C的
    .ssh/authorized_密钥中
  • 代码就在这里,我之所以使用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


    提前感谢。

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

    对于AWS(或GCP等),您可以通过IAM和角色管理访问控制。因此,如果您通过IAM设置了B&C之间的交互,并且与a&C之间的角色/服务帐户不同,则B&C之间的通信将按照您的规范进行控制。您的A机器仍然可以控制机器B,但现在它是一个不同的范例-控制结构可以是它自己的ssh密钥交换(您可以将对B的传入访问锁定为除A之外的任何内容),或者python程序中的某种bool通信协议


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

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

    对于AWS(或GCP等),您可以通过IAM和角色管理访问控制。因此,如果您通过IAM设置了B&C之间的交互,并且与a&C之间的角色/服务帐户不同,则B&C之间的通信将按照您的规范进行控制。您的A机器仍然可以控制机器B,但现在它是一个不同的范例-控制结构可以是它自己的ssh密钥交换(您可以将对B的传入访问锁定为除A之外的任何内容),或者python程序中的某种bool通信协议


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

    如果可能,请使用
    ssh copy id
    。最好不要重新发明轮子。如果可能,请使用
    ssh copy id
    。最好不要重新发明轮子。我可以为非aws机器(即B)承担IAM角色吗?可以。好消息是有很多文档都涵盖了这一点,坏消息是有很多文档都涵盖了这一点。您肯定需要创建角色,然后分配角色以允许用户/机器连接。还要确保防火墙规则允许其他计算机连接。祝你好运我可以为非aws机器(即B)担任IAM角色吗?可以。好消息是有很多文档都涵盖了这一点,坏消息是有很多文档都涵盖了这一点。您肯定需要创建角色,然后分配角色以允许用户/机器连接。还要确保防火墙规则允许其他计算机连接。祝你好运