Paramiko Python: IOError: [Errno 13] Permission denied
问题是:
我能做点什么吗?
我可以做文件夹,但不能做文件?我需要显式地调用sudo还是在paramiko中设置一些内容?我应该把文件复制到一个允许的空间并进行炒作吗?有没有一种方法可以让帕拉米科·苏多尔不用钥匙,或者让他和
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | class Ssh(object): def __init__(self): super(Ssh, self).__init__() def setup(self): '''Setup connection''' try: # DEBUG paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) #set username & password username = 'sgdevbox' password = MainFrame.ssh_pass host = '192.168.0.170' port = 22 self.transport = paramiko.Transport((host, port)) self.transport.connect(username = username, password = password) self.sftp = paramiko.SFTPClient.from_transport(self.transport) print(self.sftp.sock) except Exception, e: print(traceback.format_exc()) def putFiles(self, sources, listingSku): ''' Upload images to server along with all currentItemInfo, plus initials and date Basically build the auction and put it into the queue for verification ''' print(' # Ssh.putFiles() #') if isinstance(sources, unicode): sources = {sources,'True'} try: self.setup() destination = '/var/www' cwd = os.getcwd() for source in sources: filename = os.path.split(source)[-1] destinationFolder = listingSku final_path = posixpath.join(destination,destinationFolder) try: self.sftp.mkdir(final_path, mode=777) except: print(traceback.format_exc()) final_destination = posixpath.join(final_path, filename) sourceFilePath = os.path.join(cwd,source) print(' # Source Path: {} # Destination Path: {} '.format(sourceFilePath,final_destination)) self.sftp.put(sourceFilePath, final_destination) except Exception, e: print(traceback.format_exc()) return |
回溯:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Source Path: C:\A\Long\Path\622-402_01.JPEG # Destination Path: /var/www/WOOBLE-WAMBLER-SPAM-1235/622-402_01.JPEG DEBUG:paramiko.transport.sftp:[chan 1] open('/var/www/WOOBLE-WAMBLER-SPAM-1235/622-402_01_swatch.JPEG', 'wb') Traceback (most recent call last): File"display_image.py", line 67, in putFiles self.sftp.put(sourceFilePath, final_destination) File"C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 565, in put fr = self.file(remotepath, 'wb') File"C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 245, in open t, msg = self._request(CMD_OPEN, filename, imode, attrblock) File"C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 635, in _request return self._read_response(num) File"C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 682, in _read_response self._convert_status(msg) File"C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 710, in _convert_status raise IOError(errno.EACCES, text) IOError: [Errno 13] Permission denied |
号
我看过的其他帖子:
- http://www.lag.net/paramiko/docs/paramiko.sftpclient class.html输入
- 我试图理解为什么在使用Paramiko 1.7.6时出现"权限被拒绝"错误。
- 使用paramiko在sftp中"放置"
- IOError:[errno 13]权限被拒绝:
- ioerror:[errno 13]权限被拒绝
- 为什么我会收到ioerror:[errno 13]权限被拒绝?
- python-ioerror:[errno 13]权限被拒绝:
- 使用shutil.copyfile,我得到一个python ioerror:[errno 13]权限被拒绝:
- https://github.com/fabric/fabric/issues/257网站
- https://github.com/fabric/fabric/issues/828
- https://github.com/fabric/fabric/issues/257网站
- http://code.activestate.com/recipes/576810-copy-files-over-ssh-using-paramiko/
- 如何与帕拉米科一起运行sudo?(Python)
有些帖子有点陈旧,但似乎表明帕拉米科没有实施?Fabric实现了一个版本,但我不确定是否要添加更多的依赖项。
1 2 3 | (Pdb) import pkg_resources (Pdb) pkg_resources.get_distribution('paramiko').version '1.13.0' |
1)cron任务将文件夹从/home/user/desktop移到/var/www
2)以根用户身份登录。(明显的安全问题)
在主机服务器上运行
我还向WWW数据添加了用户,并递归地浏览了文件和目录,但我认为设置根密码是成功的。
编辑不做上述操作:更改权限和/或所有权在Linux上:如果可以在以下位置使用ssh:
江户十一〔一〕号
查看谁拥有目录和R/W权限。
1 2 | bob@bob-p7-1298c:~$ ls -ld /var/www drwxr-xr-x 3 root root 4096 Sep 24 10:39 /var/www |
然后研究使用:
- 埃多克斯1〔2〕
- 埃多克斯1〔3〕
- 江户十一〔四〕号
- 埃多克斯1〔5〕
- 埃多克斯1〔6〕
给用户R/W权限。
这可以通过以下方式实现:
- 更改目录的所有者
- 将用户添加到目录组
- 创建新组并更改目录中的组
- 更改所有者
- 更改所有者、组或公共的R/W权限。
见:
- https://askubuntu.com/questions/6723/change-folder-permissions-and-ownership
- https://askubuntu.com/questions/19898/whats-the-simpest-way-to-edit-and-add-files-to-var-www
我自己在Windows上收到"拒绝许可"错误。我的代码看起来像这样-
1 | sftp.put(sftp_local_path +"\\filename.txt", sftp_remote_path) |
号
然后我把它改了如下-
1 2 3 | with pysftp.Connection(host=sftp_host,username=sftp_user_id, password=sftp_pwd, port=sftp_port, cnopts=cnopts ) as sftp: with sftp.cd(sftp_remote_path): sftp.put(sftp_local_path +"\\filename.txt") |
我能成功上传文件。