用Python 3在Windows上进行SSH和SCP

3 投票
2 回答
5298 浏览
提问于 2025-04-16 18:10

我在这里卡了好几天了。我想把一个文件从我的Windows电脑复制到一个远程的Linux服务器上,然后在那里运行一个脚本。我有用来连接的工具,比如ssh和scp,可以通过命令行访问Linux服务器,但当我通过Python调用时,它就卡住了。

pro=subprocess.Popen('ssh user@server')
pro.communicate()

屏幕上什么都没有,等我输入的内容过了一会儿才显示出来。我本来希望能出现一个输入密码的提示,但实际上没有。我考虑过用一些库,比如paramiko、pexpect、pyssh,但它们都不支持Python 3。

任何帮助都非常感谢。

2 个回答

-1

这里有个类似的问题。可以使用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
  • 还有很多很多其他用途

这在局域网和互联网的本地或远程机器上都能很好地工作,只要注意相关问题(原问题没有说明“远程”的具体含义)。以下是一些示例:

至于评论“但这不是Python”:当有很好的基础工具已经移植到所有操作系统,并且除了基础操作系统外没有其他依赖时,不要重复造轮子。

0

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上。

撰写回答