Discuss / Python / 请问linux下Popen.communicate是否能够为scp命令输入密码?

请问linux下Popen.communicate是否能够为scp命令输入密码?

Chxj19

#1 Created at ... [Delete] [Delete and Lock User]

看了子进程部分关于communicate的部分后想到用来为scp自动输入密码,修改了一个非常简单的版本,但是运行起来仍然需要输入密码.

教程是python3的,我这边使用的是2.7,我看2.7的教程对应部分也没有相关描述,但是网上搜了一下2.7是有这个模块的,测试nslookup和cat也都正常.

是否是scp无法通过此方式输入?

#! /usr/bin/python

from subprocess import Popen, PIPE

p = Popen(['scp /home/test root@10.192.38.91:/home/'], stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True)
output, err = p.communicate('12345')
print(output.decode('utf-8'))
print('Exit code:', p.returncode)

Chxj19

#2 Created at ... [Delete] [Delete and Lock User]

还是没有找到问题原因,有没有哪位同学知道的

廖雪峰

#3 Created at ... [Delete] [Delete and Lock User]

改成ssh key登录就不需要输密码了

Chxj19

#4 Created at ... [Delete] [Delete and Lock User]

感谢廖老师的回复,使用ssh key的方式我知道,讨论这个问题只是由于我这边尝试使用scp输入密码的方式拷贝文件时仍然要输入密码. 想要知道是否是我哪个地方写错了,还是scp这种命令和cat和nslookup有所不同,不能使用communicate的方式.


  • 1

Reply