我正在尝试使用来自windows机器的python的子进程模块连接到unix框。请注意:严格要使用子进程模块(plz不建议使用pexpect,paramiko,因为我无法从windows运行它们以连接到unix知识也有环境限制) 这是我尝试的代码,我总是得到带密码提示的交互式键盘验证消息:我尝试向该提示发送密码但无法这样做。
import subprocess
cmd='plink -ssh username@hostname -pw password'
sp=subprocess.Popen(cmd,stdin=subprocess.pipe,stdout=subprocess.pipe,shell=False)
sp.stdin.write('password \n')
sp.stdin.flush()
error,out=sp.communicate
print error
print out
在命令中使用-pw不起作用(一次使用一个 - -pw选项或stdin.write),也尝试过stdin.write来控制,但也不能这样做。我对我的执行环境也有一些限制,而且pexpect需要在windows中不存在的termios
答案 0 :(得分:0)
这在我的Windows机箱上工作正常,可以连接到FreeBSD:
>>> import subprocess
>>> cmd = r'c:\path\to\plink -ssh user@machine -pw pass'
>>> p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
>>> p.stdin.write(b'ls -al\nexit\n')
12
>>> p.stdin.flush()
>>> err = p.stderr.read()
>>> out = p.stdout.read()
>>> print(err)
b'Using username "user".\r\n'
>>> print(out.decode())
Last login: Mon Nov 20 17:16:18 2017 from xxx
... remaining of login message
$ ls -al
total 240
... listing of home directory
$ exit
应该根据您自己的Linux或Unix框设置 user
,pass
和machine
...