命令与脚本:网络连接与传输 · 维持远程会话与批量执行任务至搭建隧道、虚拟网络与路由控制
维持远程会话与批量执行任务
交互会话保持见 screen;SSH 连接监控见 autossh;批量主机操作先看 ansible,再看 playbook。
screen · 在远程服务器上保持会话打开。通过单个 SSH 连接管理多个窗口
另请参阅:
tmux,zellij,herdr。 更多信息:https://manned.org/screen。
- 启动一个新的 screen 会话:
screen- 启动一个指定名称的新 screen 会话:
screen -S {{会话名称}}- 启动一个后台会话,指定会话名称并执行指定命令并将日志输出到 screenlog.x:
screen -dmLS {{会话名称}} {{命令}}- 显示所有打开的 screen 会话:
screen -ls- 重新连接到一个打开的 screen 会话:
screen -r {{会话名称}}- 从当前 screen 会话中分离(先按
Ctrl + A然后按D分离会话):
<Ctrl a><d>- 关闭当前 screen 会话:
<Ctrl a><k>- 关闭一个已经分离的 screen 会话:
screen -X -S {{会话名称}} quitautossh · 创建,监控或重启 SSH 连接
自动重连会确保你的端口转发隧道打开。接受所有 SSH 参数。 更多信息:https://manned.org/autossh。
- 启动 SSH 会话,当监控 ([M]onitoring) 的端口无法返回数据时,自动重启:
autossh -M {{监控_端口}} "{{ssh_命令}}"- 将本地 ([L]ocal) 端口转发到远程端口,必要时重启转发:
autossh -M {{监控_端口}} -L {{本地_端口}}:localhost:{{远程_端口}} {{用户名}}@{{主机名}}- 在执行 SSH 命令前,将
autossh切换到后台,不 ([N]ot) 启动远程 shell:
autossh -f -M {{监控_端口}} -N "{{ssh_命令}}"- 后台运行,不监控端口,而是每 10 秒发送 SSH 心跳包 (SSH keep-alive packet) 来检测掉线:
autossh -f -M 0 -N -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" "{{ssh_命令}}"- 后台运行,不监控端口,不启动远程 shell,当端口转发掉线时退出:
autossh -f -M 0 -N -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" -o ExitOnForwardFailure=yes -L {{本地_端口}}:localhost:{{远程_端口}} {{用户名}}@{{主机名}}- 后台运行,将
autossh调试输出和 SSH 详细输出写入到文件:
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。
- 列出给定组下的所有主机:
ansible {{组}} --list-hosts- 调用 ping 模块验证连接与远端 Python 可用性(不是 ICMP ping):
ansible {{组}} {{[-m|--module-name]}} ping- 调用 setup 模块收集一组主机的 facts:
ansible {{组}} {{[-m|--module-name]}} setup- 调用命令模块并使用给定的参数来对一组主机执行命令:
ansible {{组}} {{[-m|--module-name]}} command {{[-a|--args]}} '{{命令}}'- 以管理员权限执行一个命令:
ansible {{组}} {{[-b|--become]}} --ask-become-pass {{[-m|--module-name]}} command {{[-a|--args]}} '{{命令}}'- 使用自定义的清单文件执行一个命令:
ansible {{组}} {{[-i|--inventory]}} {{清单文件}} {{[-m|--module-name]}} command {{[-a|--args]}} '{{命令}}'- 列出清单中的组:
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 中的任务:
ansible-playbook {{playbook}}- 使用自定义主机清单执行 playbook 中的任务:
ansible-playbook {{playbook}} {{[-i|--inventory]}} {{清单文件}}- 使用通过命令行定义的额外变量执行 playbook 中的任务:
ansible-playbook {{playbook}} {{[-e|--extra-vars]}} "{{变量1}}={{值1}} {{变量2}}={{值2}}"- 使用在 JSON 文件中定义的额外变量执行 playbook 中的任务:
ansible-playbook {{playbook}} {{[-e|--extra-vars]}} "@{{变量.json}}"- 执行 playbook 中的指定标签的任务:
ansible-playbook {{playbook}} {{[-t|--tags]}} {{标签1,标签2}}- 从指定任务开始执行 playbook 中的任务:
ansible-playbook {{playbook}} --start-at-task "{{任务名称}}"- 以不做任何更改(试执行)方式执行 playbook 中的任务:
ansible-playbook {{playbook}} {{[-C|--check]}} {{[-D|--diff]}}asciinema · 录制和回放终端会话,并可选分享到 <https://asciinema.org>
另请参阅:
terminalizer,agg。 更多信息:https://docs.asciinema.org/manual/cli/。
- 将本地安装的
asciinema与 asciinema.org 账号关联:
asciinema auth- 新建录制并保存到本地文件(按
<Ctrl d>或输入exit结束):
asciinema rec {{路径/到/录制文件.cast}}- 从本地文件回放终端录制:
asciinema play {{路径/到/录制文件.cast}}- 回放托管在 https://asciinema.org 的终端录制:
asciinema play https://asciinema.org/a/{{文件id}}- 新建录制,限制空闲时间最多 2.5 秒:
asciinema rec {{[-i|--idle-time-limit]}} 2.5- 打印本地保存录制的完整输出:
asciinema cat {{路径/到/录制文件.cast}}- 上传本地保存的终端录制到 asciinema.org:
asciinema upload {{路径/到/录制文件.cast}}ac · 打印用户连接时间的统计数据
更多信息:https://manned.org/ac.8。
- 打印当前用户连接的时间,以小时为单位:
ac- 打印用户连接的时间,以小时为单位:
ac -p- 打印一个特定用户的连接时间,以小时为单位:
ac -p {{用户名}}- 打印一个特定用户每天连接的时间,以小时为单位(包括总数):
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):
frps- 使用新的 TOML 配置文件启动服务:
frps {{[-c|--config]}} {{路径/到/frps.toml}}- 使用指定的配置文件启动服务:
frps {{[-c|--config]}} {{路径/到/文件}}- 检查配置文件的有效性:
frps verify {{[-c|--config]}} {{路径/到/文件}}- 生成 Bash、fish、PowerShell 或 Zsh 的自动补全脚本:
frps completion {{bash|fish|powershell|zsh}}- 显示版本:
frps {{[-v|--version]}}frpc · frp 客户端组件,用于连接 frps 服务端并启动反向代理
属于
frp的一部分。 更多信息:https://github.com/fatedier/frp。
- 使用默认配置文件(当前目录下的
frpc.ini)启动服务:
frpc- 使用新的 TOML 配置文件启动服务:
frpc {{[-c|--config]}} {{路径/到/frpc.toml}}- 使用指定的配置文件启动服务:
frpc {{[-c|--config]}} {{路径/到/文件}}- 检查配置文件的有效性:
frpc verify {{[-c|--config]}} {{路径/到/文件}}- 生成 Bash、fish、PowerShell 或 Zsh 的自动补全脚本:
frpc completion {{bash|fish|powershell|zsh}}- 显示版本:
frpc {{[-v|--version]}}sshuttle · 通过 SSH 连接传输流量的透明代理服务器
不需要在远程 SSH 服务器上进行任何特殊设置,但会提示在本地机器上获取 root 访问权限。 更多信息:https://manned.org/sshuttle。
- 通过远程 SSH 服务器转发所有 IPv4 TCP 流量:
sshuttle {{[-r|--remote]}} {{用户名}}@{{服务器名}} {{0.0.0.0/0}}- 同时将所有 DNS 流量转发到服务器的默认 DNS 解析器:
sshuttle --dns {{[-r|--remote]}} {{用户名}}@{{服务器名}} {{0.0.0.0/0}}- 转发所有流量,除了发往特定子网的流量:
sshuttle {{[-r|--remote]}} {{用户名}}@{{服务器名}} {{0.0.0.0/0}} {{[-x|--exclude]}} {{192.168.0.1/24}}- 使用 tproxy 方法转发所有 IPv4 和 IPv6 流量:
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。
- 加入一个网络:
sudo zerotier-cli join {{网络id}}- 列出网络:
sudo zerotier-cli listnetworks- 以可读格式列出对等节点:
sudo zerotier-cli peers- 离开一个网络:
sudo zerotier-cli leave {{网络id}}- 显示 ZeroTier One 的状态:
sudo zerotier-cli {{[info|status]}}zrok · 将本地服务和文件暴露到互联网
OpenZiti 项目的一部分,提供安全的零信任共享。 更多信息:https://docs.zrok.io/。
- 请求使用公共 zrok 服务的邀请(首先运行此命令):
zrok invite- 使用邀请邮件中的令牌启用 zrok 环境:
zrok enable {{你的令牌}}- 为本地 Web 服务器创建一个可公开访问的 URL:
zrok share public {{http://localhost:8080}}- 创建一个仅可通过唯一令牌访问的安全共享:
zrok share private {{http://localhost:3000}}- 访问由其他用户创建的私有共享:
zrok access private {{共享令牌}}- 将本地目录的内容作为一个简单的网站提供服务:
zrok share public --backend-mode web {{路径/到/目录}}- 显示 zrok 环境的状态以及当前活动的共享:
zrok statusbirdc · BIRD 远程控制
从 bird 获取路由等信息,并在运行时执行配置。 更多信息:https://bird.network.cz/?get_doc&v=30&f=bird-4.html。
- 打开远程控制台:
birdc- 无需重启 BIRD 即可重新加载配置:
birdc configure- 显示 BIRD 的当前状态:
birdc show status- 显示所有已配置的协议:
birdc show protocols- 显示协议的所有详细信息:
birdc show protocols {{上游1}} all- 显示包含特定 AS 号的所有路由:
birdc "show route where bgp_path ~ [{{4242120045}}]"- 显示所有最佳路由:
birdc show route primary- 显示从给定前缀出发的所有路由的详细信息:
birdc show route for {{fd00:/8}} all继续阅读
- 文件与文本处理完整实践与解答
- 文件与文本处理上手与对象
- 文件与文本处理任务与配置