用Python 3在Windows上进行SSH和SCP
我在这里卡了好几天了。我想把一个文件从我的Windows电脑复制到一个远程的Linux服务器上,然后在那里运行一个脚本。我有用来连接的工具,比如ssh和scp,可以通过命令行访问Linux服务器,但当我通过Python调用时,它就卡住了。
pro=subprocess.Popen('ssh user@server')
pro.communicate()
屏幕上什么都没有,等我输入的内容过了一会儿才显示出来。我本来希望能出现一个输入密码的提示,但实际上没有。我考虑过用一些库,比如paramiko、pexpect、pyssh,但它们都不支持Python 3。
任何帮助都非常感谢。
2 个回答
这里有个类似的问题。可以使用netcat。输入'man nc'来查看帮助。在Python中使用os.system()来在客户端和服务器端启动它。
以下是netcat的手册介绍:
描述
nc(或netcat)工具几乎可以用于所有与TCP或UDP相关的事情。它可以打开TCP连接,发送UDP数据包,监听任意的TCP和UDP端口,进行端口扫描,并处理IPv4和IPv6。与telnet(1)不同,nc可以很好地进行脚本处理,并将错误信息分开到标准错误输出,而不是像telnet(1)那样将一些错误信息发送到标准输出。
常见用途包括:
- 简单的TCP代理
- 基于脚本的HTTP客户端和服务器
- 网络守护进程测试
- 用于ssh(1)的SOCKS或HTTP ProxyCommand
- 还有很多很多其他用途
这在局域网和互联网的本地或远程机器上都能很好地工作,只要注意相关问题(原问题没有说明“远程”的具体含义)。以下是一些示例:
- http://www.sans.org/security-resources/sec560/netcat_cheat_sheet_v1.pdf
“Netcat - TCP/IP瑞士军刀 - SANS”
- http://www.sans.org/reading_room/whitepapers/tools/netcat-tcp-ip-swiss-army-knife_952
- 注意,sans.org教授基础计算机科学工具和安全知识。
http://www.g-loaded.eu/2006/11/06/netcat-a-couple-of-useful-examples/;注意这个例子展示了通过netcat进行完整的自动备份:“Netcat非常适合创建分区镜像并实时发送到远程机器”
http://www.stearns.org/doc/nc-intro.v0.9.html;这是一个非常简单的远程日志记录示例。
至于评论“但这不是Python”:当有很好的基础工具已经移植到所有操作系统,并且除了基础操作系统外没有其他依赖时,不要重复造轮子。
http://docs.fabfile.org/en/1.0.1/index.html
我不太确定这个能不能通过2to3工具转换。
不过使用起来其实挺简单的:
from fabric.api import run, env
from fabric.context_managers import hide
from fabric.colors import green
with hide('status', 'running', 'output'):
print('Apache ' + env.host + ': ' + green(run('wget -q -O /dev/null http://localhost/ && echo OK')))
env.host是从命令行传过来的,twisted couch是另一个选择,但它还没有移植到Python 3上。