Termscp--终端界面的多协议多平台文件传输管理

这篇教程来自termscp官方文档,终于找到一个可以替代FileZilla/scp/rz/sz的工具了,用choco安装也很方便(我的win10居然已经预装了)。目前发现的槽点包括跳转比较慢,搜索巨慢,还有窗口太小会报错= =! 以下是本文余下内容是官方文档的中文版翻译

操作指南 🎓

用法

termscp启动时可以使用以下选项:

termscp [options]... [protocol://user@address:port:wrkdir] [local-wrkdir]

  • -P, --password <password> 登陆密码
  • -c, --config 打开termscp时打开配置页面
  • -q, --quiet 禁用日志
  • -t, --theme <path> 导入自定义主题
  • -v, --version 打印版本信息
  • -h, --help 打开帮助

termscp有两种不同的启动模式,不带参数时,termscp将显示登录表单页,用户可以填写连接到远程服务端所需的参数。

或者,用户可以提供一个url作为参数,跳过认证页,直接与远程服务器进行连接。

如果提供了url参数,你也可以提供本地主机的起始工作目录。

微信截图_20210924112449

地址参数

地址参数的格式如下:

[protocol://][username@]<address>[:port][:wrkdir]

让我们通过一些例子熟悉这个特殊语法,它很好上手,你会很快习惯并且替代其他工具……

  • 使用默认协议(在配置中定义)连接到192.168.1.31,如果没有提供端口,则为所选协议的默认端口(取决于你的配置);用户名是系统当前用户名

    termscp 192.168.1.31
  • 使用默认协议(在配置中定义)连接到192.168.1.31,用户名为root

    termscp root@192.168.1.31
  • 使用scp连接到192.168.1.31, 端口号为4022; 用户名为 omar

    termscp scp://omar@192.168.1.31:4022
  • 使用scp连接到192.168.1.31, 端口号为4022; 用户名为 omar。工作目录为 /tmp

    termscp scp://omar@192.168.1.31:4022:/tmp

如何输入密码

你可能已经注意到,url参数中没有办法直接附加密码,你可以通过以下三种方式提供密码:

  • -P, --password 不推荐:直接在参数中填写明文密码。强烈不推荐这种方法,因为它非常不安全(因为你可能会把密码保留在shell历史记录中)。
  • 通过 sshpass: 你可以通过 sshpass 传入密码, 例如: sshpass -f ~/.ssh/topsecret.key termscp cvisintin@192.168.1.31
  • 提示输入密码:如果你不使用前面的任何方法,你会被提示输入密码,就像 scpssh 等比较经典的工具上一样。

文件浏览

termscp中的文件资源管理器是指你与远程建立连接后可以看到的面板。
面板由3个部分组成(是的,就这三个):

  • 本地资源管理器面板:它显示在你的屏幕左侧,显示localhost的当前目录文件列表。
  • 远程资源管理器面板:它显示在你屏幕的右边,显示远程主机的当前目录文件列表。
  • Find results panel: depending on where you’re searching for files (local/remote) it will replace the local or the explorer panel. This panel shows the entries matching the search query you performed.查找结果面板:根据你搜索文件的位置(本地/远程),它将取代对应资源管理器面板。这个面板显示与你执行的搜索查询相匹配的条目。

为了切换面板,你需要输入 <LEFT> 来移动远程资源管理器面板,<RIGHT> 来移动回本地资源管理器面板。当在查找结果面板时,你需要按<ESC>来退出面板,回到前一个面板。

快捷键

按键命令助记词
<ESC>断开远程连接;回到登录页
<TAB>在日志面板和管理器面板之间切换
<BACKSPACE>返回上一次目录
<RIGHT>切换到远程管理器面板
<LEFT>切换到本地管理器面板
<UP>在当前列表中向上移动光标
<DOWN>在当前列表中向下移动光标
<PGUP>在当前列表中光标上移8行
<PGDOWN>在当前列表中光标下移8行
<ENTER>进入文件夹
<SPACE>上传 / 下载选中文件
<A>是否显示隐藏文件All
<B>按..排序Bubblesort?
<C>复制文件(夹)Copy
<D>创建文件夹Directory
<E>删除文件(同 DELErase
<F>文件搜索 (支持通配符)Find
<G>跳转到指定路径Go to
<H>显示帮助Help
<I>显示选中文件(夹)信息Info
<L>刷新当前目录列表 / 清除选中状态List
<M>选中文件Mark
<N>使用键入的名称新建文件New
<O>编辑文件;参考文本编辑器文档Open
<Q>退出termscpQuit
<R>重命名文件Rename
<S>另存为…Save
<U>进入上层目录Upper
<V>使用默认方式打开文件View
<W>使用指定程序打开文件With
<X>运行命令eXecute
<Y>是否开启同步浏览sYnc
<DEL>删除文件
<CTRL+A>选中所有文件
<CTRL+C>终止文件传输

处理多个文件

你可以同时操作多个文件,按<M>选定它们,或者按<CTRL+A> 全选当前工作目录中的所有文件。一旦一个文件被标记为选择,它将在左边显示一个 *。在这种模式下,只有选定的文件会被处理,而当前光标高亮显示的项目会被忽略。在查找结果面板中,也可以对多个文件进行处理。
在处理多个文件时,所有的操作都是可用的,但请注意,有些操作的工作方式略有不同。让我们深入了解一下:

  • 复制: 当你复制一个文件时,你会被提示输入完整目标路径名。当处理多个文件时,这个名称指的是所有这些文件将被复制到的目标目录。
  • 重命名: 和复制操作类似, 但是会移动文件到目标路径。
  • 保存为: 和复制操作类似, 但是会写入文件到目标路径。

同步浏览

启用时,同步浏览将允许你在两个面板之间同步导航操作。这意味着,每当你在一个面板上改变工作目录时,同样的动作会在另一个面板上重现。如果你想启用同步浏览,只需按下<Y>;按两次就可以禁用。当启用时,同步浏览的状态将在状态栏上显示为ON

警告:目前,每当你试图访问一个不存在的目录,你不会被提示创建它。这点可能会在未来的更新中改进。

打开/打开方式

打开和打开方式的功能是由[open-rs](https://docs.rs/crate/open/1.7.0)提供的。
执行视图命令(<V>)时,关联该文件类型的系统默认应用程序会被调用以打开当前文件。这依赖于操作系统默认的服务,所以要确保你的系统中至少安装了一个这样的服务:

  • Windows 用户: 无需额外操作,程序内部会调用 start 命令。
  • MacOS 用户: 同样无需额外操作,程序内部会调用系统内置的 open 命令。
  • Linux 用户: 以下程序之一需要被安装:
    • xdg-open
    • gio
    • gnome-open
    • kde-open
  • WSL 用户: wslview 是必要的,你需要安装 wslu.

Q: 我可以使用V命令编辑远程文件吗?
A: 不可以,至少不能在 “远程管理面板 “上直接操作。你必须先把它下载到本地目录,这是由于当你打开一个远程文件时,该文件会被下载到一个临时目录中,但没有办法监控这个文件的状态,同时也无法得知你用来打开它的程序何时被关闭。也就是说,termscp无法获知你何时完成对该文件的编辑。


书签

在termscp中,你可以保存常用的服务器,随后可以从termscp的主界面中快速连接到这些服务器。termscp也会在历史记录中保存你最后连接的16个主机。这个功能保留了连接到某个远程服务器的所有参数,只需在登录页下方的Tab中选中书签即可。

书签会尝试被保存在以下路径:

  • $HOME/.config/termscp/ – Linux/BSD
  • $HOME/Library/Application Support/termscp – MacOs
  • FOLDERID_RoamingAppData\termscp\ – Windows

对于书签(不包括服务器连接历史记录)而言,也可以保存用于验证的密码。注意默认情况下不保存密码,必须在保存新书签时通过提示指定密码。

我对在termscp中存储密码的做法非常持保留意见。原因是什么?在你的电脑上保存密码可能会让黑客进入你所注册的任何服务器。但我必须承认,对许多机器来说,每次都输入密码真的很无聊,而且很多时候我必须与局域网内的机器一起工作,这对攻击者来说没有任何好处,所以我想出了一个折衷办法来处理密码。

我强烈建议你遵循这些原则,以决定你是否应该本地保存密码:

  • 绝对不要 在连接公网的机器上本地保存密码,只可以在局域网机器上这么做
  • 确保你的机器有网络保护措施。可以的话,对你的磁盘进行加密,并且在你离开时锁定你的电脑。
  • 最好是在确保目标机器不易受影响的情况下才保存密码。

请按照以下步骤新建书签:

  1. 在认证页中输入待连接服务器的参数
  2. <CTRL+S>
  3. 输入书签名称
  4. 选择是否保留密码
  5. <ENTER> 提交

无论何时你想使用以前保存的连接,只需按下<TAB>导航到书签列表,然后按<ENTER>将书签参数加载到表格中。

bookmarks

我的密码安全吗?

这是当然 😉。
如前所述,书签与密码一起保存在你的配置目录中。密码显然不是纯文本,它们是用AES-128加密的。这够不够安全?绝对够 (BSD和WSL用户除外😢)

WindowsLinuxMacOS上,如果可能的话(但应该是),密码会被分别存储在Windows Vault系统钥匙串Keychain中。这实际上是超级安全的,并且是由你的操作系统直接管理的。

❗请注意,如果你是一个Linux用户,你真的应该阅读下面的章节👀,因为你的系统可能没有启用或支持钥匙串功能

另一方面,在BSDWSL上,用于加密密码的密钥是存储在你的驱动器上的(在$HOME/.config/termscp)。那么,仍然有可能检索到密钥来解密密码。幸运的是,密钥的位置保证了你的密钥不能被与你不同的用户读取,但是,是的,我仍然不会为暴露在互联网上的服务器保存密码😉。

Linux Keyring

我们都喜欢Linux,因为它给了用户自由。作为一个Linux用户,你基本上可以做任何你想做的事情,但这也有一些缺点,比如说,不同的发行版之间往往没有标准的应用程序。这也涉及到钥匙串。
这意味着,在Linux上,你的系统可能没有安装钥匙串。不幸的是,我们用来处理钥匙存储的库需要一个在D-BUS上公开org.freedesktop.secrets的服务,而最糟糕的事实是,只有两个服务在公开它。

  • ❗ 如果你使用GNOME作为桌面环境(例如ubuntu用户),那么你是幸运的,因为钥匙串已经由gnome-keyring提供,一切都应该已经准备就绪了。
  • ❗对于其他桌面环境的用户,有一个很好的程序,你可以用它来获得钥匙串,这就是KeepassXC,我在我的Manjaro中使用它(带KDE),一切都很正常。唯一的问题是,你必须设置它与termscp一起使用(但这很简单)。要开始使用KeepassXC,请阅读更多[这里](#keepassxc-setup-for-termscp)。
  • ❗如果你不想安装任何这些服务呢?好吧,这没有问题! termscp依然能正常工作,但它会将密钥保存在一个文件中,就像它通常为BSD和WSL做的那样。
KeepassXC setup for termscp

参照以下步骤,为termscp配置keepassXC:

  1. 安装KeepassXC
  2. 进入工具栏的 “工具”>”设置”。
  3. 选择 “秘密服务集成 “并切换 “启用KeepassXC freedesktop.org secret服务集成”
  4. 创建一个数据库,如果你还没有:在工具栏的 “数据库”>”新数据库”
  5. 从工具条上 “数据库” > “数据库设置”
  6. 选择 “secret服务集成 “并切换 “在此组下暴露条目”
  7. 7.在列表中选择你希望termscp secret保存到的组。记住,这个组可能被任何其他应用程序通过DBUS存储密钥。

配置

termscp支持一些用户定义参数,这些参数可以通过配置来修改。
termscp有一个TOML文件和一些其他的目录,所有的参数都会被保存在这些目录中,但是不用担心,你不必手动编辑这些文件,因为我为termscp制作了可交互的用户界面。

termscp和书签一样,只需要保证这些路径是可访问的:

  • $HOME/.config/termscp/ – Linux/BSD
  • $HOME/Library/Application Support/termscp – MacOs
  • FOLDERID_RoamingAppData\termscp\ – Windows

要访问配置,你只需在termscp的主界面上按<CTRL+C>

这些参数可以自定义:

  • Text Editor:使用的文本编辑器。默认情况下,termscp将为你找到默认的编辑器;通过这个选项,你可以强制使用一个编辑器(如vim)。也支持GUI编辑器,除非它们从父进程中nohup。所以,如果这是你的问题:是的,你可以使用notepad.exe,然而,Visual Studio Code不工作
  • Default Protocol:默认协议是termscp中默认使用的文件传输协议。这适用于登录页和地址中的CLI参数。
  • Show Hidden Files:选择是否应默认显示隐藏文件。你可以在运行时按 A 来切换是否显示隐藏的文件。
  • Check for updates:如果设置为 yes,termscp将通过Github API检查是否有新版本的termscp。
  • Group Dirs:选择在文件浏览器中是否对文件夹进行分组。如果选择 Display first,目录将根据设置的方法排序,但仍显示在文件之前;如果选择 Display last,则正好相反。
  • Remote File formatter syntax:在远程资源管理器中为每个文件显示文件信息的语法。参见资源管理器格式
  • Local File formatter syntax:在本地资源管理器中显示每个文件的文件信息的语法。参见资源管理器格式

SSH Key Storage

配置选项还包括termscp为SFTP/SCP客户端提供的一个必要功能:SSH密钥存储。

你可以从配置中切换到到 SSH Keys tab页来访问SSH密钥存储,在那里你可以:

  • Add a new key:只需按下<CTRL+N>,你将被提示创建一个新的密钥。提供主机名/ip地址和与该钥匙关联的用户名,最后会打开一个文本编辑器:将PRIVATE SSH key粘贴到文本编辑器中,保存并退出。
  • Remove an existing key:只要在你想删除的密钥上按下<DEL><CTRL+E>,就可以从 termscp 中永久删除该密钥。
  • Edit an existing key:只需在你想编辑的密钥上按下<ENTER>,就可以修改私钥。

问:等等,我的私钥受密码保护,也是可以用的吗?
答:当然可以。termscp中提供的认证密码,对用户名/密码认证和RSA密钥认证都有效。

资源管理器格式

可以为文件浏览器配置自定义的格式,本地和远程主机允许进行单独设定,所以你可以使用两种不同的语法。这些字段的名称为 File formatter syntax (local)File formatter syntax (remote),将定义文件条目如何在文件资源管理器中显示。
格式化的语法如下 {KEY1}... {KEY2:LENGTH}... {KEY3:LENGTH:EXTRA} {KEYn}...
花括号内的每个键将被替换成相关的属性,而括号外的所有内容将保持不变。

  • 键名是固定的,必须是下面的关键字之一
  • 长度指定了为显示该字段而保留的长度。静态属性不支持这个参数(GROUP、PEX、SIZE、USER)。
  • Extra只被一些特定字段支持,也是可选的。请看各字段详细描述来判断是否支持Extra参数。

以下是自定义格式支持的键名:

  • ATIME: 最后访问时间(默认语法为%b %d %Y %H:%M);Extra参数可以指定时间显示语法(例如:{ATIME:8:%H:%M}
  • CTIME: 创建时间(语法为%b %d %Y %H:%M);Extra参数可以指定时间显示语法(例如:{CTIME:8:%H:%M}
  • GROUP: 所属组
  • MTIME: 最后修改时间(语法为%b %d %Y %H:%M);Extra参数可以指定时间显示语法(例如:{MTIME:8:%H:%M}
  • NAME: 文件名(超过24个字符的部分会被省略)
  • PEX: 文件权限(UNIX格式)
  • SIZE: 文件大小(目录不显示)
  • SYMLINK: 超链接(如果存在的话-> {FILE_PATH})。
  • USER: 所属用户

如果留空,将使用默认的格式化语法。{NAME:24} {PEX} {USER} {SIZE} {MTIME:17:%b %d %Y %H:%M}


主题

Termscp为你提供了一个很棒的功能:可以为应用程序中的几个组件配置颜色。
如果你想自定义termscp,有两种可用的途径:

  • 配置菜单
  • 导入一个配置文件

为了从termscp创建你的私人定制,你所要做的就是从auth活动页进入配置,按<CTRL+C>,然后<TAB>两次。你现在应该已经移到了 themes 面板。

在这里你可以用<UP><DOWN>移动来选择你想改变的样式,如下图所示:

themes

termscp支持传统的十六进制(#rrggbb)和RGBrgb(r, g, b)语法来表示颜色,但也接受 **css颜色**(如crimson)😉。还有一个特殊的关键词是Default,意味着使用的颜色将是基于情景的默认前景或背景颜色(文本和线条的前景色,以及容器的背景色,你猜是什么)。

如前所述,你也可以导入主题文件。你可以从themscp提供的主题中获取灵感或直接使用其中的一个,位于这个代码仓库的themes/目录下,运行themscp以导入它们 termscp -t <theme_file>。最后,如果一切正常,它应该提示你主题已经成功导入。

样式

你可以在下面的表格中找到每个样式字段的描述。
请注意,样式在配置页面不起作用,以保证它总是可以访问,以防你把一切都弄乱了。

登录页

字段描述
auth_addressIP地址输入框的颜色
auth_bookmarks书签面板的颜色
auth_password密码输入框的颜色
auth_port端口输入框的颜色
auth_protocol协议选项组的颜色
auth_recents历史记录面板的颜色
auth_username用户名输入框的颜色

文件传输页

字段描述
transfer_local_explorer_background本地资源浏览器的背景色
transfer_local_explorer_foreground本地资源浏览器的前景色
transfer_local_explorer_highlighted本地资源浏览器的边框和高亮色
transfer_remote_explorer_background远程资源浏览器的背景色
transfer_remote_explorer_foreground远程资源浏览器的前景色
transfer_remote_explorer_highlighted远程资源浏览器的边框和高亮色
transfer_log_background日志面板的背景色
transfer_log_window日志面板的窗口颜色
transfer_progress_bar_partial进度条完成部分颜色
transfer_progress_bar_total进度条背景色颜色
transfer_status_hidden状态栏 “hidden” 标签的颜色
transfer_status_sorting状态栏 “sorting” 标签的颜色;同时适用于文件排序对话框
transfer_status_sync_browsing状态栏 “sync browsing” 标签的颜色

Misc

以下这些样式会在程序不同的位置起作用:

字段描述
misc_error_dialog报错信息的颜色
misc_input_dialog输入对话框的颜色(比如拷贝文件时)
misc_keys键盘输入文字的颜色
misc_quit_dialog退出窗口的颜色
misc_save_dialog保存窗口的颜色
misc_warn_dialog警告窗口的颜色

文本编辑器

Termscp有很多功能,你可能已经注意到了,其中之一就是可以查看和编辑文本文件。不管文件是在本地主机还是在远程主机上,termscp都提供了在你喜欢的文本编辑器中打开文件的功能。
如果文件位于远程主机上,该文件将首先被下载到你的临时文件目录中,然后,只有在对该文件进行了修改的情况下,才会重新上传至远程主机上。

多说一句,你只能编辑文本文件;二进制文件是不可以的。

如何配置文本编辑器?

文本编辑器是通过awesome crate自动查找的,如果你想改变默认的文本编辑器,请在termscp配置中改变它。阅读更多


日志

termscp会为每个会话创建一个日志文件,该文件在

  • $HOME/.config/termscp/termscp.log – Linux/BSD
  • $HOME/Library/Application Support/termscp/termscp.log – MacOs
  • FOLDERID_RoamingAppData\termscp\termscp.log – Windows

日志不会滚动,只是在每次启动 termscp 后被截断,所以如果你想报告一个问题并想附上你的日志文件,再次启动 termscp 之前请先将日志文件保存在一个安全的地方。日志文件总是以trace级别报告,所以它有点冗长。我知道你可能有一些关于日志文件的问题,所以我做了一个Q/A:

有没有可能降低日志级别?

不可以,原因很简单:当一个问题发生时,你必须能够知道是什么原因造成的,而唯一的办法就是在日志文件中设置记录最多的细节。

如果日志级别设置为trace,会产生很大的文件吗?

应该不会,除非你从不退出termscp,但我认为这很可能发生。一个长的会话可能会产生高达10MB的日志文件(我说的是一个长的会话),但我认为一个正常的会话不会超过2MB。

我不希望有日志记录,我可以把它关掉吗?

可以的。只要用-q or --quiet选项启动termscp。你可以用别名来启动termscp从而使这个选项一直生效。记住,日志是用来诊断故障的,所以在每个开源项目的背后,都应该有这样的互动反馈,保留日志文件可能是你支持项目的途径😉。我不想让你感到内疚,只是想提一句。

日志是安全的吗?

如果你担心安全问题,日志文件不包含任何普通的密码,所以不用担心,它暴露的信息与同级文件 书签 报告的信息相同。