问题描述
从 Windows(Windows 10,python3.6.3)我想向 Linux 服务器发送一些简单的命令并返回结果。而已。我想保持简单和简短。我没想到这会如此困难,但似乎有一堆有用但不起作用、过时或过于复杂的解决方案。我知道,不应在命令行中传递密码,但我处于封闭环境中,因此我不需要高级加密和公钥/私钥等。我也知道人们强烈建议使用 {{1 }},但由于不同的原因我无法安装。
到目前为止我的学习:
-
Paramiko
不适用于 Windows -
pxssh
不允许在命令行中发送密码(而PuTTY
允许) - 人们强烈建议使用
plink
。虽然由于不同的原因我无法安装。 -
Paramiko
基于Fabric
- 我尝试了
Paramiko
没有成功
我想,列出对我不起作用的代码片段的所有链接是没有意义的,太多了......这些问题的以下 StackOverflow 答案要么已经过时,要么也没有帮助:
- Perform commands over ssh with Python
- Python script for SSH through PuTTY
- Using Plink (PuTTy) to SSH through Python
- How to execute a program or call a system command from Python?
目前,我认为我最接近 ssh.exe
因为在 Windows 命令行中,以下内容
plink
无需手动输入密码或回车确认直接登录,我可以手动输入C:\Users\Downloads\PuTTY\plink.exe -ssh -batch [email protected] -pw abc123
、ls
等命令
但是,现在我想通过 Python 程序以编程方式执行此操作。 从这里开始:https://stackoverflow.com/a/32615977/7295599(似乎已经过时)。 到目前为止,我得到了以下结果:
uname -a
但是这在 10 秒后超时,没有打印任何结果。
我不确定这是否是 import subprocess
ffname_exe = r'C:\Users\Downloads\PuTTY\plink.exe'
user='user'
server='111.22.33.44'
password = 'abc123'
plink = '{} -ssh -batch {}@{} -pw {}'.format(ffname_exe,user,server,password)
print(plink)
proc = subprocess.Popen(plink,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
command='uname -a'
stdout,stderr = proc.communicate(command.encode(),timeout=10)
print(stdout)
print(stderr)
或 subprocess
或服务器的问题?实际上,我不受 plink
,Windows 上使用 plink
、PuTTY
等的任何其他简单解决方案的约束,无需用户交互(输入密码或确认任何内容)和安装ssh.exe
很好。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)