相关疑难解决方法(0)

使用脚本自动输入SSH密码

我需要创建一个自动输入密码给OpenSSH ssh客户端的脚本.

假设我需要myname@somehost使用密码进入SSH a1234b.

我已经尝试过......

#~/bin/myssh.sh
ssh myname@somehost
a1234b
Run Code Online (Sandbox Code Playgroud)

......但这不起作用.

如何将此功能添加到脚本中?

linux ssh shell openssh

173
推荐指数
12
解决办法
48万
查看次数

使用subprocess.Popen通过SSH或SCP发送密码

我正在尝试使用scp(安全复制)命令subprocess.Popen.登录要求我发送密码:

from subprocess import Popen, PIPE

proc = Popen(['scp', "user@10.0.1.12:/foo/bar/somefile.txt", "."], stdin = PIPE)
proc.stdin.write(b'mypassword')
proc.stdin.flush()
Run Code Online (Sandbox Code Playgroud)

这会立即返回错误:

user@10.0.1.12's password:
Permission denied, please try again.
Run Code Online (Sandbox Code Playgroud)

确定密码是正确的.我通过手动调用scpshell 轻松验证它.那么为什么这不起作用呢?

请注意,有许多类似的问题,询问subprocess.Popen并发送自动SSH或FTP登录的密码:

如何从python脚本在linux中设置用户密码?
使用子进程发送密码

这些问题的答案不起作用和/或不适用,因为我使用的是Python 3.

python linux ssh subprocess python-3.x

10
推荐指数
4
解决办法
5万
查看次数

为什么将stdin提供给subprocess.Popen会导致写入stdout的内容发生变化?

我正在使用Python的subprocess.Popen使用主机操作系统的二进制客户端执行一些FTP.由于各种原因,我无法使用ftplib或任何其他库.

如果我将stdin处理程序附加到Popen实例,则二进制文件的行为似乎会发生变化.例如,使用XP的ftp客户端,它接受要发出的命令的文本文件:

>>>from subprocess import Popen, PIPE  
>>>p = Popen(['ftp','-A','-s:commands.txt','example.com'], stdout=PIPE)  
>>>p.communicate()[0]  
'Connected to example.com.  
220 ProFTPD 1.3.1 Server (Debian) ...   
331 Anonymous login ok, send your complete email address as your password  
<snip>
ftp> binary  
200 Type set to I  
ftp> get /testfiles/100.KiB  
200 PORT command successful  
150 Opening BINARY mode data connection for /testfiles/100.KiB (102400 bytes)  
226 Transfer complete  
ftp: 102400 bytes received in 0.28Seconds 365.71Kbytes/sec.  
ftp> quit  
>>>
Run Code Online (Sandbox Code Playgroud)

commands.txt中:

binary  
get /testfiles/100.KiB  
quit  
Run Code Online (Sandbox Code Playgroud)

当还提供stdin时,stdout中的所有内容是:

>>>from subprocess import …
Run Code Online (Sandbox Code Playgroud)

python stdin subprocess stdout popen

6
推荐指数
2
解决办法
3669
查看次数

无法为带有子进程的进程提供密码 [python]

我正在使用 subprocess 从 python 中运行脚本。我试过这个

选项1

password = getpass.getpass()
from subprocess import Popen, PIPE, check_call  
proc=Popen([command, option1, option2, etc...], stdin=PIPE, stdout=PIPE, stderr=PIPE)  
proc.stdin.write(password)  
proc.stdin.flush()  
stdout,stderr = proc.communicate()  
print stdout  
print stderr  
Run Code Online (Sandbox Code Playgroud)

和这个

选项2

password = getpass.getpass()
subprocess.call([command, option1, option2, etc..., password])
Run Code Online (Sandbox Code Playgroud)

它们都不起作用,即密码没有发送到进程。如果我使用选项 2 并且不提供密码,子进程会要求我提供密码并且一切正常。

python subprocess

2
推荐指数
1
解决办法
9548
查看次数

标签 统计

python ×3

subprocess ×3

linux ×2

ssh ×2

openssh ×1

popen ×1

python-3.x ×1

shell ×1

stdin ×1

stdout ×1