Sha*_*ang 0 python stdin popen
我需要使用python执行几个shell命令,但无法解决其中一个问题。当我scp到另一台计算机时,通常会提示并询问是否将此计算机添加到已知主机。我希望程序自动输入“是”,但无法使其正常工作。到目前为止,我的程序如下所示:
from subprocess import Popen, PIPE, STDOUT
def auto():
user = "abc"
inst_dns = "example.com"
private_key = "sample.sem"
capFile = "/home/ubuntu/*.cap"
temp = "%s@%s:~" %(user, inst_dns)
scp_cmd = ["scp", "-i", private_key, capFile, temp]
print ( "The scp command is: %s" %" ".join(scp_cmd) )
scpExec = Popen(scp_cmd, shell=False, stdin=PIPE, stdout=PIPE)
# this is the place I tried to write "yes"
# but doesn't work
scpExec.stdin.write("yes\n")
scpExec.stdin.flush()
while True:
output = scpExec.stdout.readline()
print ("output: %s" %output)
if output == "":
break
Run Code Online (Sandbox Code Playgroud)
如果我运行该程序,它仍会提示并要求输入。如何自动响应提示?谢谢。
系统提示您将主机密钥添加到已知主机文件中,因为ssh配置为StrictHostKeyChecking
。从手册页:
StrictHostKeyChecking
如果此标志设置为“ yes”,则ssh(1)将永远不会自动将主机密钥添加到〜/ .ssh / known_hosts文件,并且拒绝连接主机密钥已更改的主机。尽管当/ etc / ssh / ssh_known_hosts文件维护不当或经常与新主机建立连接时,这可能会很烦人,但它可以最大程度地防止特洛伊木马攻击。此选项强制用户手动添加所有新主机。如果此标志设置为“ no”,则ssh会自动将新的主机密钥添加到用户已知的主机文件中。如果此标志设置为“询问”,则只有在用户确认他们真正想要的操作之后,新的主机密钥才会添加到用户已知的主机文件中,并且ssh会
StrictHostKeyChecking
如果希望ssh / scp在没有提示的情况下自动接受新密钥,则可以设置为“ no”。在命令行上:
scp -o StrictHostKeyChecking=no ...
Run Code Online (Sandbox Code Playgroud)
您还可以启用批处理模式:
批处理模式
如果设置为“是”,密码短语/密码查询将被禁用。此选项在没有用户提供密码的脚本和其他批处理作业中很有用。参数必须为“是”或“否”。默认为“否”。
使用BatchMode=yes
,ssh / scp将失败而不是提示(这通常是脚本的改进)。