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

时间:2017-09-28 14:05:48

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

涉及的三台计算机是

  • A:我的桌面
  • B:非aws服务器
  • C:一个aws EC2实例

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

具体来说,我所做的就是

  1. 将B的公钥下载到A
  2. 上的某个临时文件中
  3. 将该密钥附加到C的.ssh/authorized_keys
  4. 代码在这里,我使用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&#39的公钥作为文件下载到A?

    提前感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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