执行后,在您的本地浏览器访问 `http://localhost:9999`,流量就会通过SSH隧道转发到远程服务器的 `localhost:8080`。远程端口转发:将发送到远程机器某端口的数据,转发到本地机器的指定端口。这在让外部访问您本地开发的服务时很有用。
ssh-R9000:localhost:3000 user@hostname执行后,在远程服务器上访问
localhost:9000,流量会被转发到您本地机器的localhost:3000端口。
图形界面与高级功能 🖼️
对于带有图形界面的软件,可以通过SSH的X11转发功能,将远程的图形界面显示在本地。这需要远程SSH服务器支持X11转发,并在连接时加上-X或-Y参数。
ssh-Xuser@hostname# 连接后,可以启动图形程序,如 Firefoxfirefox程序窗口将会显示在您的本地桌面上。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/1cbcdbb28cdbbe337a403d1cf8b44f71_17.png
另一个强大的工具是Mosh(Mobile Shell)。它针对移动和网络不稳定的环境做了优化,在连接断开或IP地址变更时,能更好地保持会话,体验比传统SSH更流畅。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/1cbcdbb28cdbbe337a403d1cf8b44f71_19.png
SSH配置文件 📄
为了避免每次输入冗长的连接参数(如用户名、端口、密钥位置、端口转发规则),可以配置~/.ssh/config文件。
以下是一个配置示例:
Host myserver HostName server.example.com User myusername Port2222IdentityFile ~/.ssh/id_rsa_custom LocalForward9999localhost:8080 ProxyJump bastion.example.com配置后,您只需输入ssh myserver即可使用所有预设选项进行连接。ProxyJump指令对于需要通过跳板机(堡垒主机)访问内网机器的情况特别有用。
此外,您还可以使用sshfs工具将远程目录挂载到本地文件系统,像操作本地文件夹一样操作远程文件:
sshfs user@hostname:/remote/path /local/mountpointhttps://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/1cbcdbb28cdbbe337a403d1cf8b44f71_21.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/1cbcdbb28cdbbe337a403d1cf8b44f71_22.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/1cbcdbb28cdbbe337a403d1cf8b44f71_23.png
总结 📚
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/1cbcdbb28cdbbe337a403d1cf8b44f71_25.png
本节课中我们一起学习了SSH这一强大的远程管理工具的核心用法。我们从基本的连接和命令执行开始,逐步深入到密钥认证、安全的文件传输(SCP/rsync)、管理持久会话(tmux/screen)、通过端口转发访问受限服务,以及利用配置文件简化操作。掌握这些技能,将使您能够灵活、安全、高效地在任何远程机器上开展工作。
015:网页与浏览器 🕸️
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_0.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_2.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_3.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_5.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_6.png
在本节课中,我们将学习关于网页浏览器的高级使用技巧。内容涵盖浏览器快捷键、高效搜索、隐私保护、自定义网页样式、使用用户脚本、Web API以及浏览器自动化。掌握这些工具和概念,能让你更高效、更安全地浏览网页,并解锁浏览器的强大自定义能力。
浏览器快捷键 ⌨️
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_8.png
上一节我们介绍了课程概述,本节中我们来看看如何通过键盘快捷键更高效地使用浏览器。掌握快捷键可以显著提升你的浏览效率。
以下是几个核心的浏览器快捷键:
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_10.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_12.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_14.png
Ctrl/Cmd + T:打开新标签页。Ctrl/Cmd + Shift + T:重新打开最近关闭的标签页。Ctrl/Cmd + L:将光标聚焦到地址栏,方便快速输入网址或搜索。Ctrl/Cmd + F:在当前网页内查找文本。Ctrl/Cmd + W:关闭当前标签页。鼠标中键点击标签页:关闭该标签页。
高级搜索技巧 🔍
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_16.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_18.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_19.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_21.png
我们已经了解了如何快速导航,接下来看看如何更精准地获取信息。搜索引擎(如Google)支持许多高级操作符,能帮你精确过滤结果。
以下是一些实用的搜索操作符示例:
精确短语搜索:使用引号
" "。例如,"exact phrase"会搜索完全匹配这个短语的页面。站内搜索:使用
site:。例如,site:stackoverflow.com python只在 Stack Overflow 网站内搜索关于 Python 的内容。排除特定词:使用减号
-。例如,Cambridge -UK会排除包含 “UK” 的搜索结果。逻辑“或”搜索:使用
OR。例如,electronics OR circuits会搜索包含任一关键词的结果。指定文件类型:使用
filetype:。例如,lecture notes filetype:pdf只搜索 PDF 格式的讲义。
自定义搜索引擎 🔧
除了通用搜索,你还可以为特定网站设置快捷搜索。这允许你直接从地址栏跳转到目标网站的搜索结果页。
设置方法因浏览器而异,但核心思想是让浏览器识别特定关键词。例如,你可以设置:
输入
am后按Tab键,直接在亚马逊(Amazon)搜索。输入
yt后按Tab键,直接在 YouTube 搜索。
隐私与安全扩展 🛡️
在享受便捷的同时,保护隐私和安全至关重要。安装合适的浏览器扩展是有效手段。
以下是三个推荐的基础扩展:
广告拦截器 (如 uBlock Origin):不仅能屏蔽广告,其内置的过滤器列表也能有效阻止访问已知的恶意软件站点。你可以针对特定网站临时禁用。
隐私保护工具 (如 Privacy Badger):阻止第三方跟踪器收集你的浏览数据,防止跨站指纹识别。
HTTPS 强制升级 (如 HTTPS Everywhere):自动将网站连接从明文的 HTTP 升级到加密的 HTTPS,保护数据传输安全。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_23.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_25.png
自定义网页外观 🎨
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_27.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_29.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_31.png
浏览器不仅是内容查看器,也是内容修改器。网页由HTML(结构)、CSS(样式)和JavaScript(行为)构成。你可以覆盖这些层来自定义体验。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_33.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_35.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_37.png
首先,使用浏览器的开发者工具(按F12)可以临时编辑任何网页的 HTML 和 CSS。例如,你可以将一段文字的颜色改为红色:
p{color:red;}要使更改永久化,可以安装Stylus扩展。它允许你为特定网站编写并应用自定义 CSS 样式。更有趣的是,存在UserStyles.org等社区网站,分享针对各种网站(如 GitHub、Wikipedia)的现成样式主题,你可以直接安装使用。
使用用户脚本 🤖
如果修改样式还不够,你还可以通过用户脚本修改网页的行为。这需要更谨慎,因为脚本能力更强。
安装Tampermonkey或Violentmonkey等扩展来管理用户脚本。例如,你可以编写一个脚本,在课程网站上用J和K键实现快速滚动:
// ==UserScript==// @name Class Site JK Scroll// @match https://example.com/*// ==/UserScript==document.addEventListener('keydown',(e)=>{if(e.key==='j')window.scrollBy(0,100);if(e.key==='k')window.scrollBy(0,-100);});警告:只运行你信任的来源的脚本,恶意脚本可能窃取你的信息。
利用 Web API 🌐
许多网站和服务提供Web API(应用程序接口),允许你通过程序(而非浏览器)直接获取数据或触发操作。这通常通过发送 HTTP 请求并接收结构化数据(如 JSON)来完成。
例如,你可以用curl命令获取你的公网 IP 信息:
curlhttps://ipinfo.io/json或者,利用 Google 的搜索建议 API:
curl"https://suggestqueries.google.com/complete/search?client=firefox&q=mit"更强大的应用是结合不同服务的 API 实现自动化,例如:当你的位置显示到家时,自动通过智能家居 API 打开电灯。IFTTT或Zapier这类平台提供了无需编程的 API 连接方式。
处理返回的 JSON 数据时,可以使用jq工具进行过滤和格式化:
curl...|jq'.[1]'浏览器自动化 🤖
当网站没有提供 API,或者你需要模拟复杂的用户交互(如点击、填写表单)时,可以使用浏览器自动化工具。
Selenium是一个流行的框架,它通过WebDriver控制真实的浏览器实例。你可以用 Python 等语言编写脚本,指示浏览器执行一系列操作。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_39.png
例如,自动将网页保存到 Wayback Machine:
fromseleniumimportwebdriver driver=webdriver.Firefox()driver.get("https://web.archive.org/save")url_field=driver.find_element_by_id("web-save-url-input")url_field.clear()url_field.send_keys("https://example.com")url_field.submit()# ... 等待并处理结果driver.quit()这适用于自动化测试、数据抓取或任何重复性的网页操作任务。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_41.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_43.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_45.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_47.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_49.png
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/5d77d4d592f2caabc93887dd456d74f7_50.png
本节课中我们一起学习了网页浏览器的强大功能。从提升效率的快捷键和搜索技巧,到保护隐私的扩展;从深度自定义网页外观和行为,到利用 Web API 和自动化工具与网络服务交互。希望这些知识能帮助你更聪明、更安全、更高效地使用浏览器这个日常核心工具。
016:安全与隐私 🔐
在本节课中,我们将探讨计算机安全与隐私的现状。我的目标是让大家至少能意识到自己在安全和隐私方面的“足迹”。世界充满风险,但通过了解威胁模型并采取相应措施,我们可以在便利性与安全性之间找到平衡。本节课将涵盖从身份验证到安全通信、文件加密、备份以及安全浏览等一系列核心主题。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/955f9afd41b204c26078c4472224b913_1.png
身份验证 🔑
上一节我们概述了安全与隐私的基本概念,本节中我们来看看身份验证,这是保护账户安全的第一步。
密码管理器
你应该使用密码管理器。你不应该自己编造密码,也不应该试图记住密码,更不应该把密码写下来。
以下是推荐的密码管理器:
1Password:易于在多设备间同步和使用。
pass:Linux 标准密码管理器,简单直接,使用 GPG 加密文件。
你应该使用这些应用为所有你关心的网站生成密码。如果你目前还没有使用密码管理器,今天就应该去更改所有重要服务的密码。
双因素认证 (2FA)
双因素认证能极大提升安全性。其核心思想是:除了你知道的东西(密码),还需要你拥有的东西(如手机或安全密钥)。
常见的 2FA 方案包括:
短信验证码 (SMS):可用,但安全性很差,容易受到钓鱼攻击和 SIM 卡交换攻击。
基于应用的验证器 (如 Google Authenticator, Duo):比短信好,但仍可能受到钓鱼攻击。
U2F / FIDO 安全密钥:这是目前最佳实践。它是一个物理设备(如 YubiKey),通过加密握手验证网站身份,能有效防御钓鱼攻击。公式可简化为:
安全登录 = 密码 (你知道的) + 安全密钥 (你拥有的)。
当你启用双因素认证时,网站通常会提供一些恢复代码。这些代码应该被妥善保管(例如打印出来放在安全的地方),以防你丢失了第二因素设备。
私人通信 📡
在讨论了身份验证之后,我们来看看如何保护通信内容的安全。
对于私人通信,目前的最佳选择是Signal。它的协议设计精良,也用于 WhatsApp 的一对一聊天。Wire也是一个不错的选择。
应避免使用Telegram,因为它在加密方面的记录不佳。
对于电子邮件,加密是可能的(例如使用 GPG),但设置复杂,且存在密钥分发、不具备前向保密性等问题。因此,对于敏感内容,最好避免使用电子邮件,转而使用 Signal 或 Wire。
不建议在桌面电脑上安装这些通信应用的客户端,因为笔记本电脑比手机更容易被攻破,这会扩大你的受攻击面。
文件安全 💾
保护通信安全后,我们还需要保护存储在设备上的文件。
文件安全非常困难,威胁模型至关重要。如果你只是想防御离线攻击(例如电脑关机时被偷),启用全盘加密(如 Linux 的 LUKS,Windows 的 BitLocker,macOS 的 FileVault)就足够了。
但如果攻击发生在电脑开机时(在线攻击),全盘加密就无效了。此时,你需要文件级加密。
有两种主要方法:
加密卷:创建一个大的加密文件,使用时将其作为目录挂载。工具包括
ecryptfs或EncFS。代码示例:encfs ~/.secure ~/secure_mount。单独加密文件:使用如
GPG等工具对单个文件进行加密。可以使用对称加密(gpg -c file.txt)或非对称加密。
可信否认性
在某些极端情况下(如过海关),你甚至希望隐藏加密文件的存在,这就是“可信否认性”。它试图通过隐写术等技术将数据隐藏在其他文件中。工具如VeraCrypt(TrueCrypt 的继任者)提供了此功能,但它性能较低,数据更易丢失,且实际效果存在争议。
加密备份 ☁️
文件需要保护,备份同样需要。加密备份至关重要。
不要尝试自己组合tar、rsync和GPG来制作加密备份方案。推荐使用专门的服务,如Tarsnap。它经过精心设计,支持加密增量备份,且密码学上是安全的。
备份时还需考虑:如果攻击者控制了你的源机器,他能否删除所有备份?理想的备份系统应提供“仅追加”权限,使攻击者只能添加新备份,无法删除旧备份。Tarsnap 对此有解决方案。
网络安全 🌐
现在让我们把视线从本地设备扩展到整个网络。互联网本身就是一个危险的环境。
公共 Wi-Fi
公共 Wi-Fi 网络非常危险。设备会广播曾连接过的网络名称并自动重连,攻击者可以利用“Wi-Fi 菠萝”等设备伪装成这些网络,诱使你的设备连接,从而监听所有流量。
安全建议:
连接公共 Wi-Fi 后,记得从设备的“已知网络”列表中删除它。
在不信任的网络上,考虑使用VPN。但请注意,使用 VPN 只是将信任从网络提供商转移到了 VPN 提供商。免费 VPN 通常更不可信。
如果你技术过硬,可以在云服务器上搭建自己的 VPN。推荐使用WireGuard,它配置简单,采用现代加密原语。
安全配置
在配置服务器或客户端软件(如 SSH)时,应使用安全的密码套件和密钥交换算法。网站Cipherli.st提供了各种软件的推荐安全配置。
对于注重隐私的用户,网站Privacy Tools列出了推荐的浏览器扩展、配置和工具。
网页浏览安全 🕵️♂️
最后,我们进入最复杂的环节:网页浏览。浏览器是一个复杂的“操作系统”,运行着来自任意网站的代码。
浏览器扩展
以下扩展能显著提升浏览安全:
HTTPS Everywhere:强制网站使用 HTTPS(TLS/SSL)连接。这主要加密了你与服务器之间的流量,防止窃听。
uBlock Origin:一个广谱内容拦截器。除了拦截广告,它还能阻止第三方脚本、框架等,大幅减少被攻击的风险。你可以启用“中等模式”或“困难模式”来获得更强保护,但这可能导致部分网站功能异常,需要手动调整。
容器标签页 (Firefox) / 多用户配置文件 (Chrome):将不同用途的浏览活动(如银行、工作、社交)隔离在不同的容器或配置文件中。这能防止一个网站上的恶意脚本窃取你在另一个网站上的登录凭据或数据。
TLS 与证书
HTTPS 的核心是 TLS 协议。它不仅能加密流量,还能通过证书验证服务器身份。浏览器内置了一个受信任的证书颁发机构 (CA)列表。如果服务器提供的证书由这些 CA 签发,浏览器就认为连接是安全的。
攻击者可能尝试进行“降级攻击”或使用无效证书。极端偏执的做法是:清空浏览器信任的 CA 列表,然后只手动添加你访问网站所需的少数几个 CA。这能极大限制可对你发起的证书攻击类型。
Tor 浏览器
Tor通过多层路由隐藏你的 IP 地址,但它并非万能。它对于防御强大的全局攻击者(如国家行为体)效果有限,且容易受到流量分析攻击。此外,浏览器指纹(如安装的字体、窗口大小等)仍可能暴露你的身份。Tor 浏览器试图掩盖这些指纹,但并非完美。因此,Tor 主要适用于隐藏你对服务器的身份,而非提供全面匿名。
总结 📝
本节课中我们一起学习了计算机安全与隐私的多个关键方面。
核心要点是:明确你的威胁模型。根据你担心遭受的攻击类型(如设备丢失、网络窃听、针对性攻击),来决定需要采取哪些安全措施,并接受随之而来的便利性成本。
无论如何,你都应该立即做三件事:
安装并使用密码管理器。
为所有重要账户启用双因素认证,并优先使用U2F/FIDO 安全密钥。
保持警惕,安全是一个持续的过程,需要不断学习和更新知识。
https://github.com/OpenDocCN/cs-notes-pt2-zh/raw/master/docs/mit-hkrtl/img/955f9afd41b204c26078c4472224b913_3.png
希望本课程对你有益。保持安全,保持好奇。