使用Popen的Python SSH

时间:2016-09-29 10:45:13

标签: python ssh subprocess popen

在面对此问题时,如何ssh使用Popen时默认回答“是”?

The authenticity of host '`XXXXX`' can't be established.
ECDSA key fingerprint is SHA256:LA2RqbdzD8Uxgi36KWOM12giS9T+ceOQYhYjVKReMks.
Are you sure you want to continue connecting (yes/no)?

这就是我正在尝试的

for IP in ['10.32.253.250']:
    remoteCall = subprocess.Popen(["ssh", "co_user@"+IP, "sudo svstat /etc/sv/nagios_CheckDisk_Alertz_daemon",], stdout=subprocess.PIPE, stderr=subprocess.PIPE);
    Response, err = remoteCall.communicate()
    if(re.search("authenticity of host", Response)):
        stdin.write('yes')
    print IP + "  " +Response

2 个答案:

答案 0 :(得分:0)

不确定子进程是如何做到的,接下来是另一种方式,可能对你有所帮助。 FYI。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.1.6", 22, "username", "password")
stdin, stdout, stderr = ssh.exec_command('ls') // your command here
content = stdout.readlines()
print content
ssh.close()

答案 1 :(得分:-3)

从手册页:

  

StrictHostKeyChecking

     

如果此标志设置为“yes”,则ssh(1)将永远不会自动添加主机   〜/ .ssh / known_hosts文件的密钥,并拒绝连接到主机   其主机密钥已更改。这提供了最大程度的保护   特洛伊木马攻击,虽然它可以令人讨厌   / etc / ssh / ssh_known_hosts文件维护不当或连接时   经常制作新主机。此选项强制用户执行此操作   手动添加所有新主机。如果此标志设置为“no”,则ssh将   自动将新主机密钥添加到用户已知主机文件。如果这   flag设置为“ask”,新的主机密钥将被添加到已知的用户   只有在用户确认这是他们真正的东西后才能托管文件   我想做什么,而ssh会

您可以将StrictHostKeyChecking设置为" no"如果你想让ssh / scp在没有提示的情况下自动接受新密钥。在命令行上:

scp -o StrictHostKeyChecking=no ...

您还可以启用批处理模式:

BatchMode
  

如果设置为“yes”,将禁用密码/密码查询。这个   选项在脚本和其他没有用户的批处理作业中很有用   提供密码。论证必须是“是”或“否”。   默认值为“no”。使用BatchMode = yes,ssh / scp将失败而不是   提示(这通常是对脚本的改进)。