在Python中scp文件的最pythonic方法是什么?我所知道的唯一途径是
os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )
Run Code Online (Sandbox Code Playgroud)
这是一个hack,并且在类似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')
Run Code Online (Sandbox Code Playgroud) 我是Python和编程的新手.我正在尝试通过python脚本在两台计算机之间复制文件.但是代码
os.system("ssh " + hostname + " scp " + filepath + " " + user + "@" + localhost + ":" cwd)
Run Code Online (Sandbox Code Playgroud)
不行.我认为它需要一个密码,如使用SCP或SSH如何使用Python将文件复制到远程服务器中所述?.我没有得到任何错误日志,该文件不会显示在我当前的工作目录中.
但是每个其他命令都有os.system("ssh " + hostname + "command")或者os.popen("ssh " + hostname + "command")确实有效.- >command = e.g. ls
当我ssh hostname scp file user@local:directory
在命令行中尝试
时,它无需输入密码即可运行.
我尝试将os.popen命令与getpass和pxssh模块结合起来建立与远程服务器的ssh连接,并使用它直接发送命令(我只测试它以获得简单的命令):
import pxssh
import getpass
ssh = pxssh.pxssh()
ssh.force_password = True
hostname = raw_input("Hostname: ")
user = raw_input("Username: ")
password = getpass.getpass("Password: ")
ssh.login(hostname, …Run Code Online (Sandbox Code Playgroud) 我想在 python 中复制该命令:
scp -i aKey.pem aFile.txt ec2-user@serverIp:folder
Run Code Online (Sandbox Code Playgroud)
我找到了一些 SCP 示例,但没有发现既不使用 .pem 密钥也不通知用户密码。我怎样才能在python中做到这一点?
此代码提供以下错误:
os.system("scp %s:/export/home/sample/backup.sql %s:/home/rushi/abc.sql" % (a, b))
Permission denied (publickey,keyboard-interactive).
lost connection
Run Code Online (Sandbox Code Playgroud)
a和b是命令行参数,它接受用户名和机器名作为参数:
例如:root@10.88.77.77.
我正在尝试通过 libssh2 的 no-ack 的 python byndings 将一组文件发送到远程服务器,但由于缺乏文档,我完全不知道库的使用情况。
我尝试使用 libssh2 的 C 文档但没有成功。
由于我使用的是 python 3.2,所以 paramiko 和 pexpect 是不可能的。有人可以帮忙吗?
编辑:我刚刚在 no-Ack 的博客评论中找到了一些代码。
import libssh2, socket, os
SERVER = 'someserver'
username = 'someuser'
password = 'secret!'
sourceFilePath = 'source/file/path'
destinationFilePath = 'dest/file/path'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((SERVER, 22))
session = libssh2.Session()
session.startup(sock)
session.userauth_password(username, password)
sourceFile = open(sourceFilePath, 'rb')
channel = session.scp_send(destinationFilePath, 0o644, os.stat(sourceFilePath).st_size)
while True:
data = sourceFile.read(4096)
if not data:
break
channel.write(data)
exitStatus = channel.exit_status()
channel.close()
Run Code Online (Sandbox Code Playgroud)
似乎工作正常。
我想登录网络中的不同机器,并将该机器中的文件复制到我的机器上.我想用python做这个.任何想法我怎么能这样做.我有python 2.5和ubuntu 8.10
ssh ×7
python ×5
scp ×5
automation ×1
libssh2 ×1
linux ×1
paramiko ×1
private-key ×1
public-key ×1
python-3.2 ×1