I need to execute several shell commands using python, but I couldn’t resolve one of the problems. When I scp to another machine, usually it prompts and asks whether to add this machine to known host. I want the program to input “yes” automatically, but I couldn’t get it to work. My program so far looks like this:
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
If I run this program, it still prompt and ask for input. How can I response to the prompt automatically? Thanks.
You’re being prompted to add the host key to your know hosts file because ssh is configured for
StrictHostKeyChecking. From the man page:You can set
StrictHostKeyCheckingto “no” if you want ssh/scp to automatically accept new keys without prompting. On the command line:You can also enable batch mode:
With
BatchMode=yes, ssh/scp will fail instead of prompting (which is often an improvement for scripts).