免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 24773 | 回复: 11
打印 上一主题 下一主题

如何在Python中scp远程拷贝文件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-25 16:56 |只看该作者 |倒序浏览
用subprocess还是paramiko等等?谁有方案?

论坛徽章:
0
2 [报告]
发表于 2010-10-25 17:19 |只看该作者


来个最简单的最搞笑的
  1. os.popen(scp ...)
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-10-25 17:28 |只看该作者
这样不行吧,你如何输入密码?

论坛徽章:
0
4 [报告]
发表于 2010-10-25 17:30 |只看该作者
有一个pexpect模块,可以实现ssh连接,改造一下,应该可以实现scp

论坛徽章:
0
5 [报告]
发表于 2010-10-25 17:52 |只看该作者
回复 2# 月吻清风

这样不行吧,你如何输入密码?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-10-25 20:51 |只看该作者
本帖最后由 L_kernel 于 2010-10-25 20:52 编辑
回复  月吻清风

这样不行吧,你如何输入密码?
zhengwuzhou 发表于 2010-10-25 17:52



    pexpect这个模块,可以当做shell中的expect来用。
2009年5月7日 ... Pexpect 是一个用来启动子程序并对其进行自动控制的Python 模块。 Pexpect  可以用来和像ssh、ftp、passwd、telnet 等命令行程序进行自动交互。
http://www.ibm.com/developerwork ... pexpect1/index.html

论坛徽章:
0
7 [报告]
发表于 2010-10-25 21:57 |只看该作者
paramiko可以,其实你只要配置好信任关系,安全问题不大的噢。:)

论坛徽章:
0
8 [报告]
发表于 2010-10-26 09:39 |只看该作者
paramiko可以,其实你只要配置好信任关系,安全问题不大的噢。:)
smallfish_xy 发表于 2010-10-25 21:57



   赞成斑竹的 一般用到scp最好是能够dsa或非对称rsa建立信任关系 然后进行scp的操作或者rsync


如果不喜欢或者只是临时的可以看看 http://zh-tw.w3support.net/index.php?db=so&id=68335 这篇文章,有几种解决办法 摘取其中一种:
  1. import os
  2. import paramiko

  3. ssh = paramiko.SSHClient()
  4. ssh.load_host_keys(os.path.expanduser(os.path.join("~",".ssh","known_hosts")))
  5. ssh.connect(server,username=username,password=password)
  6. sftp = ssh.open_sftp()
  7. remote_file = sftp.file(remotepath,"wb")
  8. remote_file.set_pipelined(True)
  9. remote_file.write(data)
  10. sftp.close()
  11. ssh.close()
复制代码

论坛徽章:
0
9 [报告]
发表于 2010-10-26 11:33 |只看该作者
回复 8# 月吻清风

如下有什么问题呢?报错“IOError: [Errno 2] No such file”
  1. import os
  2. import paramiko

  3. ssh = paramiko.SSHClient()
  4. ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
  5. ssh.connect('192.168.1.13', username='root', password='xxxxxx')
  6. sftp = ssh.open_sftp()
  7. remote_file = sftp.file('~/www', 'wb')
  8. remote_file.set_pipelined(True)
  9. remote_file.write('wwwwwwwwwwwwwwwwwwwwwwww')
  10. sftp.close()
  11. ssh.close()
复制代码

论坛徽章:
0
10 [报告]
发表于 2010-10-26 11:45 |只看该作者
回复 7# smallfish_xy

后来发现把
  1. remote_file = sftp.file('~/www', 'wb')
复制代码
改为
  1. remote_file = sftp.file('/root/www', 'wb')
复制代码
就没问题了,后来又试了
  1. remote_file = sftp.file(os.path.expanduser(os.path.join('~', 'www')), 'wb')
复制代码
没有问题。这是为何?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP