未提供项目描述
项目描述
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
工作之前需要手动配置。具体来说,需要在配置中设置output
和url_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
这将:
- 启动一个终端来显示maim计时器
- 启动maim选择窗口,它将在3秒后截取截图
- 使用您喜欢的图像查看器预览截图(使用xdg-open(1))
- 在上传前请求确认(使用xmessage(1))
- 然后上传文件
因此,截图比其他机制需要更多的配置。首先安装依赖项
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
兼容,但它有以下变化
-
使用更清晰。不同的操作是“命令”,在用法中清楚地概述,并且正确地“冲突”
-
长选项:
publish
只有单字母选项,而pubpaste
还支持长形式选项 -
--undo
默认为最后一个令牌,即--republish
是隐式的 -
--undo
从历史记录中删除令牌,使用户可以“弹出”回历史记录,取消多个条目 -
--purge
是内置的,而不是单独的脚本 -
新增了
-L | --follow-symlinks
选项 -
照片画廊:新增了
--sigal
选项
以下是一些一般行为变化
-
内置图形通知:虽然
publish
可以通过钩子修改(在上传时通知用户),但pubpaste
则是跳出常规来做这件事。 -
我们默认使用
xclip -selection clipboard
而不是xclip
,因为后者与-x
选项冲突。如果可用,我们使用 GTK 处理剪切板事件,这为我们提供了图像支持。 -
配置文件路径和格式:
publish
的配置是位于~/.publish.cfg
的 shell 脚本,而pubpaste
的配置是位于~/.config/pubpaste.yml
的 YAML 文件。这破坏了向下兼容性。 -
可扩展性:
pubpaste
的可扩展性不如publish
。后者有“钩子”,即运行在程序各个点之前和之后的 shell 函数,配置可以完全覆盖。这非常强大,但文档不佳,可能还相当危险。我们在pubpaste
中采用了更传统的做法:修改应在源代码中完成,并以补丁的形式提出。
以下功能缺失
-q
:将 URL 编码成 QR 码并上传 该- 最大历史记录大小
这些选项已被弃用,将不会实现
-8
:应该正确配置网络服务器-r
:一个我从未使用过的晦涩的 rsync 功能is_text
检测:我们只是假设标准输入是文本
现有技术
以下是一些类似项目,除了上面的 publish,按字母顺序排列
- 0bin.net:客户端加密,JavaScript
- 0x0.st:也称为“null pointer”,极简粘贴板
- Stikked:PHP,"高级且美观"
- dpaste:新颖的想法:在 DHT 上粘贴
- hardbin:基于 IPFS
- ix.io:可能是最古老的极简粘贴板(2009 年)
- microbin:过期,原始文件,Rust,二维码,过期
- pastebinit:支持将文本发布到多个粘贴网站,Python
- pasthis:基于PHP,也是命令行工具
- plowshare:(集合)执行类似任务的shell脚本,将特定站点的功能委托给解包脚本,由于安全责任问题从Debian中删除
- privatebin:最小化,客户端加密,PHP
- termbin/fiche:简约至上;甚至不是curl,只是nc,C
- transfer.sh:简约,Golang
- up1:客户端加密,JavaScript
此处未包括部署某些工具或其它专有工具的实际站点列表。
此列表可能不完整。请注意,尽管如此,上述任何实现都没有pubpaste(甚至发布)的功能集。pubpaste和发布都缺乏执行客户端(即基于浏览器的)加密的能力(不,OpenPGP,Age或OpenSSL不算)。
贡献
请参阅贡献指南以获取更多信息。简而言之:这是一个免费软件项目,欢迎您加入我们,通过修复问题、报告问题或编写文档来改进它。
本项目遵守盟约行为准则。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分布
构建分布
pubpaste-0.8.5-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | cad47c5f8944792f4ed2ec6d3e68dbdb3d0919d9e6517845807db97155c26750 |
|
MD5 | c6a2ddcaaa3487ffd1f72d7a2fe95f2a |
|
BLAKE2b-256 | be63dbcbb0ee006a9762a44af5e62f0fb8bf3414bbf1769893ccb60a9794b5c3 |