Skip to content
← 返回文件与文本处理列表
文件与文本处理任务与配置

命令与脚本:网络连接与传输 · 维持远程会话与批量执行任务至搭建隧道、虚拟网络与路由控制 ​

返回分篇目录

维持远程会话与批量执行任务 ​

交互会话保持见 screen;SSH 连接监控见 autossh;批量主机操作先看 ansible,再看 playbook。

screen · 在远程服务器上保持会话打开。通过单个 SSH 连接管理多个窗口 ​

另请参阅:tmux, zellij, herdr。 更多信息:https://manned.org/screen。

  • 启动一个新的 screen 会话:
bash
screen
  • 启动一个指定名称的新 screen 会话:
bash
screen -S {{会话名称}}
  • 启动一个后台会话,指定会话名称并执行指定命令并将日志输出到 screenlog.x:
bash
screen -dmLS {{会话名称}} {{命令}}
  • 显示所有打开的 screen 会话:
bash
screen -ls
  • 重新连接到一个打开的 screen 会话:
bash
screen -r {{会话名称}}
  • 从当前 screen 会话中分离(先按 Ctrl + A 然后按 D 分离会话):
bash
<Ctrl a><d>
  • 关闭当前 screen 会话:
bash
<Ctrl a><k>
  • 关闭一个已经分离的 screen 会话:
bash
screen -X -S {{会话名称}} quit

autossh · 创建,监控或重启 SSH 连接 ​

自动重连会确保你的端口转发隧道打开。接受所有 SSH 参数。 更多信息:https://manned.org/autossh。

  • 启动 SSH 会话,当监控 ([M]onitoring) 的端口无法返回数据时,自动重启:
bash
autossh -M {{监控_端口}} "{{ssh_命令}}"
  • 将本地 ([L]ocal) 端口转发到远程端口,必要时重启转发:
bash
autossh -M {{监控_端口}} -L {{本地_端口}}:localhost:{{远程_端口}} {{用户名}}@{{主机名}}
  • 在执行 SSH 命令前,将 autossh 切换到后台,不 ([N]ot) 启动远程 shell:
bash
autossh -f -M {{监控_端口}} -N "{{ssh_命令}}"
  • 后台运行,不监控端口,而是每 10 秒发送 SSH 心跳包 (SSH keep-alive packet) 来检测掉线:
bash
autossh -f -M 0 -N -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" "{{ssh_命令}}"
  • 后台运行,不监控端口,不启动远程 shell,当端口转发掉线时退出:
bash
autossh -f -M 0 -N -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" -o ExitOnForwardFailure=yes -L {{本地_端口}}:localhost:{{远程_端口}} {{用户名}}@{{主机名}}
  • 后台运行,将 autossh 调试输出和 SSH 详细输出写入到文件:
bash
AUTOSSH_DEBUG=1 AUTOSSH_LOGFILE={{路径/到/autossh_日志_文件.log}} autossh -f -M {{监控_端口}} -v -E {{路径/到/ssh_日志_文件.log}} {{ssh_命令}}

ansible · 通过 SSH 协议远程管理计算机组。使用 /etc/ansible/hosts 文件来添加组 / 主机 ​

此命令也有关于其子命令的文件,例如:galaxy。 更多信息:https://docs.ansible.com/projects/ansible/latest/cli/ansible.html。

  • 列出给定组下的所有主机:
bash
ansible {{组}} --list-hosts
  • 调用 ping 模块验证连接与远端 Python 可用性(不是 ICMP ping):
bash
ansible {{组}} {{[-m|--module-name]}} ping
  • 调用 setup 模块收集一组主机的 facts:
bash
ansible {{组}} {{[-m|--module-name]}} setup
  • 调用命令模块并使用给定的参数来对一组主机执行命令:
bash
ansible {{组}} {{[-m|--module-name]}} command {{[-a|--args]}} '{{命令}}'
  • 以管理员权限执行一个命令:
bash
ansible {{组}} {{[-b|--become]}} --ask-become-pass {{[-m|--module-name]}} command {{[-a|--args]}} '{{命令}}'
  • 使用自定义的清单文件执行一个命令:
bash
ansible {{组}} {{[-i|--inventory]}} {{清单文件}} {{[-m|--module-name]}} command {{[-a|--args]}} '{{命令}}'
  • 列出清单中的组:
bash
ansible localhost {{[-m|--module-name]}} debug {{[-a|--args]}} '{{var=groups.keys()}}'

ansible-playbook · 通过 SSH 协议在远程计算机上执行 playbook 中定义的任务 ​

更多信息:https://docs.ansible.com/projects/ansible/latest/cli/ansible-playbook.html。

  • 执行 playbook 中的任务:
bash
ansible-playbook {{playbook}}
  • 使用自定义主机清单执行 playbook 中的任务:
bash
ansible-playbook {{playbook}} {{[-i|--inventory]}} {{清单文件}}
  • 使用通过命令行定义的额外变量执行 playbook 中的任务:
bash
ansible-playbook {{playbook}} {{[-e|--extra-vars]}} "{{变量1}}={{值1}} {{变量2}}={{值2}}"
  • 使用在 JSON 文件中定义的额外变量执行 playbook 中的任务:
bash
ansible-playbook {{playbook}} {{[-e|--extra-vars]}} "@{{变量.json}}"
  • 执行 playbook 中的指定标签的任务:
bash
ansible-playbook {{playbook}} {{[-t|--tags]}} {{标签1,标签2}}
  • 从指定任务开始执行 playbook 中的任务:
bash
ansible-playbook {{playbook}} --start-at-task "{{任务名称}}"
  • 以不做任何更改(试执行)方式执行 playbook 中的任务:
bash
ansible-playbook {{playbook}} {{[-C|--check]}} {{[-D|--diff]}}

asciinema · 录制和回放终端会话,并可选分享到 <https://asciinema.org> ​

另请参阅:terminalizer, agg。 更多信息:https://docs.asciinema.org/manual/cli/。

  • 将本地安装的 asciinema 与 asciinema.org 账号关联:
bash
asciinema auth
  • 新建录制并保存到本地文件(按 <Ctrl d> 或输入 exit 结束):
bash
asciinema rec {{路径/到/录制文件.cast}}
  • 从本地文件回放终端录制:
bash
asciinema play {{路径/到/录制文件.cast}}
bash
asciinema play https://asciinema.org/a/{{文件id}}
  • 新建录制,限制空闲时间最多 2.5 秒:
bash
asciinema rec {{[-i|--idle-time-limit]}} 2.5
  • 打印本地保存录制的完整输出:
bash
asciinema cat {{路径/到/录制文件.cast}}
  • 上传本地保存的终端录制到 asciinema.org:
bash
asciinema upload {{路径/到/录制文件.cast}}

ac · 打印用户连接时间的统计数据 ​

更多信息:https://manned.org/ac.8。

  • 打印当前用户连接的时间,以小时为单位:
bash
ac
  • 打印用户连接的时间,以小时为单位:
bash
ac -p
  • 打印一个特定用户的连接时间,以小时为单位:
bash
ac -p {{用户名}}
  • 打印一个特定用户每天连接的时间,以小时为单位(包括总数):
bash
ac -dp {{用户名}}

搭建隧道、虚拟网络与路由控制 ​

frp 先配置服务端 frps,再让客户端 frpc 连接;其他隧道及虚拟网络工具保留各自配置示例。

frp · 高性能的反向代理,可快速搭建网络隧道,将内网服务暴露到互联网或其他外部网络 ​

注意:frp 不是一个单独的命令,而是一组命令。 更多信息:https://github.com/fatedier/frp#example-usage。

  • 查看 frp 客户端组件 frpc 的文档:

参见 frpc。

  • 查看 frp 服务端组件 frps 的文档:

参见 frps。

frps · 快速建立反向代理服务 ​

属于 frp 的一部分。 更多信息:https://github.com/fatedier/frp。

  • 使用默认配置文件启动服务(假定当前目录中存在 frps.ini):
bash
frps
  • 使用新的 TOML 配置文件启动服务:
bash
frps {{[-c|--config]}} {{路径/到/frps.toml}}
  • 使用指定的配置文件启动服务:
bash
frps {{[-c|--config]}} {{路径/到/文件}}
  • 检查配置文件的有效性:
bash
frps verify {{[-c|--config]}} {{路径/到/文件}}
  • 生成 Bash、fish、PowerShell 或 Zsh 的自动补全脚本:
bash
frps completion {{bash|fish|powershell|zsh}}
  • 显示版本:
bash
frps {{[-v|--version]}}

frpc · frp 客户端组件,用于连接 frps 服务端并启动反向代理 ​

属于 frp 的一部分。 更多信息:https://github.com/fatedier/frp。

  • 使用默认配置文件(当前目录下的 frpc.ini)启动服务:
bash
frpc
  • 使用新的 TOML 配置文件启动服务:
bash
frpc {{[-c|--config]}} {{路径/到/frpc.toml}}
  • 使用指定的配置文件启动服务:
bash
frpc {{[-c|--config]}} {{路径/到/文件}}
  • 检查配置文件的有效性:
bash
frpc verify {{[-c|--config]}} {{路径/到/文件}}
  • 生成 Bash、fish、PowerShell 或 Zsh 的自动补全脚本:
bash
frpc completion {{bash|fish|powershell|zsh}}
  • 显示版本:
bash
frpc {{[-v|--version]}}

sshuttle · 通过 SSH 连接传输流量的透明代理服务器 ​

不需要在远程 SSH 服务器上进行任何特殊设置,但会提示在本地机器上获取 root 访问权限。 更多信息:https://manned.org/sshuttle。

  • 通过远程 SSH 服务器转发所有 IPv4 TCP 流量:
bash
sshuttle {{[-r|--remote]}} {{用户名}}@{{服务器名}} {{0.0.0.0/0}}
  • 同时将所有 DNS 流量转发到服务器的默认 DNS 解析器:
bash
sshuttle --dns {{[-r|--remote]}} {{用户名}}@{{服务器名}} {{0.0.0.0/0}}
  • 转发所有流量,除了发往特定子网的流量:
bash
sshuttle {{[-r|--remote]}} {{用户名}}@{{服务器名}} {{0.0.0.0/0}} {{[-x|--exclude]}} {{192.168.0.1/24}}
  • 使用 tproxy 方法转发所有 IPv4 和 IPv6 流量:
bash
sshuttle --method tproxy {{[-r|--remote]}} {{用户名}}@{{服务器名}} {{0.0.0.0/0}} {{::/0}} {{[-x|--exclude]}} {{你本地 IP 地址}} {{[-x|--exclude]}} {{SSH 服务器的 IP 地址}}

zerotier-cli · 控制本地的 ZeroTier 虚拟网络服务 ​

另请参阅:zerotier-idtool, zerotier-one。 更多信息:https://github.com/zerotier/ZeroTierOne/blob/main/doc/zerotier-cli.1.md。

  • 加入一个网络:
bash
sudo zerotier-cli join {{网络id}}
  • 列出网络:
bash
sudo zerotier-cli listnetworks
  • 以可读格式列出对等节点:
bash
sudo zerotier-cli peers
  • 离开一个网络:
bash
sudo zerotier-cli leave {{网络id}}
  • 显示 ZeroTier One 的状态:
bash
sudo zerotier-cli {{[info|status]}}

zrok · 将本地服务和文件暴露到互联网 ​

OpenZiti 项目的一部分,提供安全的零信任共享。 更多信息:https://docs.zrok.io/。

  • 请求使用公共 zrok 服务的邀请(首先运行此命令):
bash
zrok invite
  • 使用邀请邮件中的令牌启用 zrok 环境:
bash
zrok enable {{你的令牌}}
  • 为本地 Web 服务器创建一个可公开访问的 URL:
bash
zrok share public {{http://localhost:8080}}
  • 创建一个仅可通过唯一令牌访问的安全共享:
bash
zrok share private {{http://localhost:3000}}
  • 访问由其他用户创建的私有共享:
bash
zrok access private {{共享令牌}}
  • 将本地目录的内容作为一个简单的网站提供服务:
bash
zrok share public --backend-mode web {{路径/到/目录}}
  • 显示 zrok 环境的状态以及当前活动的共享:
bash
zrok status

birdc · BIRD 远程控制 ​

从 bird 获取路由等信息,并在运行时执行配置。 更多信息:https://bird.network.cz/?get_doc&v=30&f=bird-4.html。

  • 打开远程控制台:
bash
birdc
  • 无需重启 BIRD 即可重新加载配置:
bash
birdc configure
  • 显示 BIRD 的当前状态:
bash
birdc show status
  • 显示所有已配置的协议:
bash
birdc show protocols
  • 显示协议的所有详细信息:
bash
birdc show protocols {{上游1}} all
  • 显示包含特定 AS 号的所有路由:
bash
birdc "show route where bgp_path ~ [{{4242120045}}]"
  • 显示所有最佳路由:
bash
birdc show route primary
  • 显示从给定前缀出发的所有路由的详细信息:
bash
birdc show route for {{fd00:/8}} all

继续阅读