跳转到主要内容

未提供项目描述

项目描述

pubpaste - 简单易用地上传文件和剪贴板

此工具通过一条命令轻松在线发布文件、剪贴板、屏幕截图和照片画廊。它有点杂乱,但工作得很好。

pubpaste 不适合新手用户:它假设您有权访问SSH服务器并知道如何配置YAML文件。这是作者在自我膨胀的狂热中编写的(遗憾的是,这对于黑客来说是典型的),向阅读此内容的普通人道歉。

教程

发布文件

pubpaste foo.jpg

然后,使用 rsync 将文件上传到具有秘密名称的目录中,生成类似这样的URL

https://example.com/2020-04-20-oMz_C_6Njja_3VbW-f17LFiTAgNsnp22fqTwjQOgmF4/foo.jpg

发布的URL已复制到剪贴板,在另一个窗口中按 control-v 分享结果。只要服务器配置得当,该URL就不应被猜测。

如果没有提供文件名,则从标准输入读取文本并将其作为 stdin.txt 文件上传。可以使用 --stdin-name 标志更改该名称。

您还可以使用以下方式上传当前 选择

pubpaste --xselection

然而,在执行上述操作之前,您必须配置pubpaste。请参阅下方的配置

pubpaste支持更多内容分享方式,请参阅下方的详细说明以获取有关截图、相册等信息。

如何做

配置

pubpaste工作之前需要手动配置。具体来说,需要在配置中设置outputurl_prefix。例如,这将告诉pubpaste将文件同步到shell.example.com,在~/public_html目录下,并且这个目录暴露为https://example.com/~user

output: "shell.example.com:public_html/"
url_prefix: "https://example.com/~user"

此配置必须存储在~/.config/pubpaste.yml中。其他配置文件路径可以通过--config命令行参数或$XDG_CONFIG_HOME目录中的pubpaste.yml(默认为~/.config)提供。

配置文件中也可以指定任何参数(如follow_symlinks)。规则是必须将连字符(-)转换为下划线(_)。

请注意,output目录不应启用目录列表,请参阅秘密令牌部分以获取更多信息。

一些设置在用法中不可见,因为它们更适合在配置文件中使用。以下是包含所有未在用法中提到的设置的示例配置文件。

output: "shell.example.com:public_html/"
url_prefix: "https://example.com/~user"
base_dir: /home/user/public_html/
save_screenshots: ~/snaps/

当然,它们也可以在命令行中使用。

屏幕截图

要使用maim发布截图,请使用:

pubpaste --screenshot

这将:

  1. 启动一个终端来显示maim计时器
  2. 启动maim选择窗口,它将在3秒后截取截图
  3. 使用您喜欢的图像查看器预览截图(使用xdg-open(1)
  4. 在上传前请求确认(使用xmessage(1)
  5. 然后上传文件

因此,截图比其他机制需要更多的配置。首先安装依赖项

apt install maim

安装一些图像查看器,例如这是GNOME默认的图像查看器

apt install eog

xdg-open(1)xmessage(1)很可能已经安装在你的计算机上,如果没有

apt install x11-utils xdg-utils

你可能不喜欢默认的xdg-open(1)打开图像时选择的内容。要更改它,请使用:

xdg-mime default application mimetype(s)

例如,这将选择Eye Of GNOME图像查看器

xdg-mime default eog.desktop image/png

要查看当前正在使用的应用程序,请查看:

xdg-mime query default image/png

默认情况下,截图不会保留在本地。但是,可以通过将save_screenshots配置设置为目录来保留它们,例如这将保留所有截图在$HOME/snaps

save_screenshots: ~/snaps/

图像画廊

使用Sigal构建图像库

pubpaste --sigal *.JPG

这将生成一个图像库在临时目录中,并将整个库上传到服务器。库配置目前是硬编码的,但最终可能会添加到配置文件中。

剪贴板支持

在进行任何上传时,远程URL将复制到X剪切板(“CLIPBOARD”选择),您可以用control-v或终端中的control-shift-v粘贴。这与X 选择不同,您可以用鼠标中键粘贴。

请注意,当使用

pubpaste --xselection

这种不对称性的背后的想法是我们不希望URL覆盖当前选择。通过将URL复制到剪切板而不是选择,我们保持当前选择活动。剪切板也更“耐用”,因为它不会在您选择文本时更改。

您可以使用--xclipboard-C)参数上传“CLIPBOARD”选择

pubpaste --xclipboard

请注意,此功能与“复制图像”链接兼容。例如,假设你在网页浏览器中有一个图像,你可以右键点击它并选择“复制图像”链接,然后使用pubpaste-x选项,它将上传图像而无需首先将图像作为文件下载。

这对于上传在Firefox中完成的截图也非常有用(在URL栏的“...”菜单中,“截图”)。

图像支持仅在安装了GTK及其Python绑定的情况下有效。

秘密令牌

pubpaste将在指定的根目录下发布文件,但使用由当前日期(YYYY-MM-DD)和一个随机、难以猜测的字符串组成的唯一令牌。可以使用--token-T)标志覆盖该令牌。例如,如果你不担心机密性并且实际上希望一个有意义的名称,你可以使用以下方式公开上传文件:

pubpaste --token my-new-bike bike.jpg

否则,将生成一个安全令牌。请注意,为了保密,目录列表必须被禁用:如果你将pubpaste指向一个启用了目录列表的目录,所有秘密都将公开,整个系统的安全性将失败。

这可以通过在output目录中添加一个空的index.html文件(如果Web服务器配置为提供这些)或禁用目录列表(例如,在Apache中使用Options -Indexes)来解决。

历史记录

pubpaste将上传的物品的历史记录保存在~/.publish.history中。这允许你取消最后上传,例如

pubpaste --undo

... 或者任意上传

pubpaste -T TOKEN --undo

同样,你可以使用以下方式重新发布之前的上传:

pubpaste --republish ...

可以使用show-history命令显示历史记录。最后使用的令牌也可以使用last-token命令访问。

过期时间

默认情况下,上传永远不会过期。你可以使用带有--ttl参数的文件添加“TTL”(生存时间)标记,该标记(以天为单位)标记了粘贴应该保留的时间。

可以通过在服务器端部署pubpaste并运行以下命令来删除旧条目:

pubpaste --purge --base-dir=/home/user/public_html

... 其中/home/user/public_html是客户端在output中提供的路径。该配置通常存储在配置文件中,如下所示

base_dir: "/home/user/public_html"

快捷键

使用方法包含所有详细信息,但如果你从命令行使用pubpaste,你可能喜欢使用命令的快捷方式。例如,截图是pubpaste -S。有关详细信息,请参阅--help

安装

此软件包在PyPI上可用。可以使用pip安装。

pip install pubpaste

它的需求很简单,所以你不需要虚拟环境

pubpaste也可以直接从源目录运行

./pubpaste.py

或将其符号链接到你的$PATH

ln -s $PWD/pubpaste.py /usr/local/bin/pubpaste

已知问题和限制

没有单元测试,但最近已经重构以使其成为可能。

照片画廊和截图代码很乱。

在一个周末内编写,可能会有错误。

仅限于具有SSH或rsync访问权限的精英黑客以及他们自己的Web服务器。可以通过支持S3、“粘贴框”或其他文件共享系统来改进。

特别是,Web服务器的错误配置可能很容易造成灾难性后果:如果Web服务器中启用了Indexes,并且父目录没有index.html来防止泄露,秘密令牌将被泄露,系统的保密性将受到损害。

同样,如果任何接收令牌的同伴不小心或恶意地分享它,秘密令牌很容易泄露。没有重命名令牌,就不能撤销访问权限,而必须手动进行。

致谢

本项目受Florian Reitmeir和Peter Palfrader最初编写的publish程序启发。它用Python重写,以便更容易进行文档记录、扩展和维护。

将其重命名是因为我们不想侵犯现有的publish命名空间,以示尊重。它也是一个过于通用的项目名称。

看起来 pubpaste 是一个不错的选择,并且根据搜索引擎的结果(检查了 DuckDuckGo、Google、GitHub 和 GitLab),似乎并没有在使用。

pub 指的是这个项目的灵感来源,即那个影响命令行设计和实现的 publish 脚本。

paste 指的是剪切板支持。因此,pubpaste 的意思是 发布这个剪切板,但它当然可以做的不仅仅是发布剪切板。

pub 还是对我自全球大流行开始就深情怀念的现实中场所的引用,那时每个人都隔离在家,酒吧也关闭了。因此,pub paste 间接地指代了老酒吧和酒吧的粘性和气味,那种老酵母和酒精与漂白剂或强力清洁剂混合后留下的奇怪气味,直到你第二天走进声音检查。

这是一个充满希望的信息:这一切不会永远持续下去,人类的混乱将带着谦卑和改进回来。

publish 中的变化

虽然 pubpaste 在命令行界面方面通常尝试与 publish 兼容,但它有以下变化

  1. 使用更清晰。不同的操作是“命令”,在用法中清楚地概述,并且正确地“冲突”

  2. 长选项:publish 只有单字母选项,而 pubpaste 还支持长形式选项

  3. --undo 默认为最后一个令牌,即 --republish 是隐式的

  4. --undo 从历史记录中删除令牌,使用户可以“弹出”回历史记录,取消多个条目

  5. --purge 是内置的,而不是单独的脚本

  6. 新增了 -L | --follow-symlinks 选项

  7. 照片画廊:新增了 --sigal 选项

以下是一些一般行为变化

  1. 内置图形通知:虽然 publish 可以通过钩子修改(在上传时通知用户),但 pubpaste 则是跳出常规来做这件事。

  2. 我们默认使用 xclip -selection clipboard 而不是 xclip,因为后者与 -x 选项冲突。如果可用,我们使用 GTK 处理剪切板事件,这为我们提供了图像支持。

  3. 配置文件路径和格式:publish 的配置是位于 ~/.publish.cfg 的 shell 脚本,而 pubpaste 的配置是位于 ~/.config/pubpaste.yml 的 YAML 文件。这破坏了向下兼容性。

  4. 可扩展性:pubpaste 的可扩展性不如 publish。后者有“钩子”,即运行在程序各个点之前和之后的 shell 函数,配置可以完全覆盖。这非常强大,但文档不佳,可能还相当危险。我们在 pubpaste 中采用了更传统的做法:修改应在源代码中完成,并以补丁的形式提出。

以下功能缺失

  • -q:将 URL 编码成 QR 码并上传
  • 最大历史记录大小

这些选项已被弃用,将不会实现

  • -8:应该正确配置网络服务器
  • -r:一个我从未使用过的晦涩的 rsync 功能
  • is_text 检测:我们只是假设标准输入是文本

现有技术

以下是一些类似项目,除了上面的 publish,按字母顺序排列

此处未包括部署某些工具或其它专有工具的实际站点列表。

此列表可能不完整。请注意,尽管如此,上述任何实现都没有pubpaste(甚至发布)的功能集。pubpaste和发布都缺乏执行客户端(即基于浏览器的)加密的能力(不,OpenPGP,Age或OpenSSL不算)。

贡献

请参阅贡献指南以获取更多信息。简而言之:这是一个免费软件项目,欢迎您加入我们,通过修复问题、报告问题或编写文档来改进它。

本项目遵守盟约行为准则

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分布

此发布版本没有可用的源代码分布文件。请参阅生成分布存档的教程。

构建分布

pubpaste-0.8.5-py3-none-any.whl (24.3 kB 查看散列

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面