5 个版本
使用旧的 Rust 2015
0.1.6 | 2019 年 6 月 5 日 |
---|---|
0.1.5 | 2019 年 4 月 17 日 |
0.1.4 | 2018 年 12 月 29 日 |
0.1.3 | 2018 年 10 月 11 日 |
0.1.2 | 2018 年 5 月 27 日 |
#585 in 异步
115KB
2K SLoC
stund — SSH 隧道守护进程
Stund(“stunned”),一个 SSH 隧道守护进程,会在后台为你维护 SSH 隧道。当你经常登录到需要每次连接都输入密码的远程系统时,这个功能非常方便。
如果你有一个可用的 Rust 工具链,可以通过以下命令安装 stund
:
cargo install stund
用法
你可能只需要运行以下命令:
stund open login.mydomain.org
这将大致运行 ssh login.mydomain.org
,使得命令在输入密码后断开与终端的连接。 如果你使用 SSH 连接复用,随后对 login.mydomain.org
的 SSH 连接将重用预先认证的连接,避免重复输入密码。
如果你不使用 SSH 连接复用,stund 基本上没有意义。
如果你在连接到你的主机时通常会给出更多的 SSH 参数,请设置你的 SSH 配置文件,添加必要的条目。几乎任何出现在命令行上的选项都可以通过 SSH 配置来自动化。 你可能需要将 ServerAliveInterval = 120
设置为使用 stund 维护隧道。
其他 stund 命令
stund close login.mydomain.org # close an existing tunnel
stund status # report status of tunnels
stund exit # shut down the background daemon
(是的,stund 基本上就像在一个 GNU screen 会话中运行 SSH。但用户体验要更好一些,而且在编写它的时候,我学到了很多关于 Rust 的 Tokio 框架中伪终端和异步 I/O 的有趣知识。)
open
命令在完成后可以选择执行另一个命令,如果你用以下语法运行它:
stund open login.mydomain.org -- command arg1 arg2
这可以作为一个单行命令,用于打开所需的隧道并登录到位于网关后面的主机
stund open login.mydomain.org -- ssh -J login.mydomain.org myinnerhost
如果连接到 login.mydomain.org
不需要任何用户交互即可打开,则可以通过以下提到的适当的 SSH ProxyCommand
配置项避免显式调用 stund
。
安装
目前,您必须自己编译 stund。但是,安装最新版本应该相当简单
- 如果您还没有安装,请安装 Rust 语言 工具链。在几乎所有情况下,推荐的方法是使用 rustup.rs。
- 如果尚未添加,请将
$HOME/.cargo/bin
添加到您的$PATH
。 - 运行
cargo install -f stund
- 运行
stund help
验证安装。
除非您想安装 stund
的最新版本,而不是最新发布版本,否则您不需要检出此存储库。
您可以使用复用 SSH 隧道执行的操作
- 如果您登录到需要您输入密码的服务,您只需在早上输入一次,而不是像不小心关闭您的“主要”连接一样,整天都定期输入!
- 动态打开和关闭端口转发.
- 透明地登录到网关内部的主机,这样您就可以执行诸如
scp
文件等操作,而无需进行多次跳跃。
如果您需要登录到位于网关后面的主机,并且网关不需要任何用户交互才能成功登录,则可以使用 stund 的“打开后执行”功能,使用类似于下面的 ProxyCommand
设置自动打开长时间运行的背景 SSH 隧道
Host inner.mydomain
ProxyCommand = stund open --no-input -q login.mydomain.org -- ssh -W inner:%p login.mydomain.org
需要 --no-input
选项来防止 stund
尝试从标准输入读取任何内容;否则,它将消耗一些 SSH 流量。
Stund 无法执行的操作
最大的限制是,如果您的笔记本电脑休眠或切换网络,stund
无法保持您的 SSH 连接处于活动状态。这根本不可能做到,因为 SSH 协议的基本设计(即 SSH 在长时间运行的 TCP 连接上运行)。
如果您需要此功能,我们了解的最佳解决方案是 mosh,它使用基于 UDP 的无会话协议,该协议通过临时 SSH 连接启动。虽然这种设计使 mosh
能够克服 SSH 的某些限制,但它意味着 mosh
不支持端口转发和文件传输等功能。此外,mosh
需要在客户端和服务器之间进行双向 UDP 流量,这通常被保守的防火墙规则禁止。
变更
有关每个版本的相关变更列表,请参阅 CHANGELOG.md。
版权和许可
Stund 由其作者拥有版权,并许可在 MIT 许可证 下。
依赖关系
~13MB
~211K SLoC