如何在Python中scp?
Python中scp文件最Python的方式是什么? 我知道的唯一路线是
os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )
这是一种黑客攻击,在类似Linux的系统之外无法运行,并且需要Pexpect模块的帮助才能避免密码提示,除非您已将无密码SSH设置为远程主机。
我知道Twisted的conch
,但我宁愿避免通过低级别的ssh模块来实施scp。
我知道paramiko
,一个支持ssh和sftp的Python模块; 但它不支持scp。
背景:我连接到不支持sftp但支持ssh / scp的路由器,因此sftp不是一个选项。
编辑 :这是如何使用SCP或SSH将文件复制到Python中的远程服务器的副本。 然而 ,这个问题并没有给出一个特定于scp的答案来处理python中的键。 我希望有一种运行代码的方式
import scp
client = scp.Client(host=host, user=user, keyfile=keyfile)
# or
client = scp.Client(host=host, user=user)
client.use_system_keys()
# or
client = scp.Client(host=host, user=user, password=password)
# and then
client.transfer('/etc/local/filename', '/etc/remote/filename')
尝试模块paramiko_scp。 它非常易于使用。 看下面的例子:
def createSSHClient(server, port, user, password):
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(server, port, user, password)
return client
ssh = createSSHClient(server, port, user, password)
scp = SCPClient(ssh.get_transport())
然后调用scp.get()或scp.put()来执行scp操作。
(SCPClient代码)
您可能有兴趣尝试Pexpect(SourceForge项目)。 这将允许您处理交互式提示输入密码。
以下是来自主网站的示例用法(对于ftp):
# This connects to the openbsd ftp site and # downloads the recursive directory listing. import pexpect child = pexpect.spawn ('ftp ftp.openbsd.org') child.expect ('Name .*: ') child.sendline ('anonymous') child.expect ('Password:') child.sendline ('noah@example.com') child.expect ('ftp> ') child.sendline ('cd pub') child.expect('ftp> ') child.sendline ('get ls-lR.gz') child.expect('ftp> ') child.sendline ('bye')
你也可以看看paramiko。 目前还没有scp模块,但它完全支持sftp。
[编辑]对不起,错过了你提到paramiko的路线。 以下模块只是paramiko的scp协议的一个实现。 如果你不想使用paramiko或者conch(我知道的python中唯一的ssh实现),你可以重写这个以使用管道在普通的ssh会话上运行。
用于paramiko的scp.py
链接地址: http://www.djcxy.com/p/25717.html