一些命令
With LLM
划分并开启 Swap
- 检查当前的 Swap 状态: 使用以下命令查看当前系统的 Swap 使用情况:
| |
- 创建 Swap 文件
- 创建一个 Swap 文件,例如 2GB 大小的文件:
| |
或者
| |
- 设置文件的权限和格式:
| |
| |
- 启用 Swap 文件
| |
- 持久配置 Swap
修改 /etc/fstab,添加 /swapfile none swap sw 0 0 以自动启用 Swap 文件。
如果是创建了 Swap 分区,则更改为添加 UUID=<swap_partition_uuid> none swap sw 0 0
- 调整调度策略(Swappiness)(可选)
Swappiness 值决定系统在何时将内存中的数据交换到 Swap 区域。默认情况下,Ubuntu 和 Debian 的 Swappiness 值通常为 60。可以根据需要调整这个值。编辑 /etc/sysctl.conf,添加或修改 vm.swappiness=10 (例如,设置为 $10$)。保存文件后 sudo sysctl -p 使其生效。
- 重启系统
| |
apt
| |
firewall
配置防火墙:
- 使用UFW:
| |
- 使用iptables:
| |
本地化环境
1. 安装并生成UTF-8本地化环境
| |
也可以
| |
进入交互式页面时,空格选中,回车确认
2. 确认本地化设置
执行以下命令,确认本地化设置是否正确:
| |
确保输出中包含如下内容:
| |
3. 更新 locale 设置
实际上刚刚执行过的命令已经写入了文件,但我测试时并没有成功,于是进行这一步
确保系统的 locale 配置文件已更新,编辑 /etc/default/locale 文件并确保内容如下:
| |
4. 重启服务器(如有必要)
有时更改本地化设置后需要重启服务器以使其生效:
| |
Mosh
相比 SSH,Mosh
- 优点:更适合延迟较高,网络不稳定的场合。断线重连时不会丢掉正在运行的进程。
- 缺点:只能浏览当前屏幕内容,滚动需要配合
less等
远程参数
似乎并不用在 server 手动执行,安装好 mosh 即可。本地化参数根据设备以及需求选择。
| |
本地参数
我的 ssh server 端口监听在 $64131$,更多的情况是 $22$。让 mosh 信息传输在 $14310$ 端口,用如下参数
不要忘记放行端口
| |
用完记得 exit,不然下次链接会显示端口占用之类的报错。那时就需要用别的方法连到机器,kill 掉才能再次通过同样的端口连接
Systemd
systemd 是一个系统和服务管理器,广泛应用于许多 Linux 发行版中,负责启动和管理系统服务和资源。它通过单一的框架提供了很多系统级功能,如启动服务、管理挂载点、设备、套接字等。
基本概念
Unit(单元):
systemd使用“单元”来表示系统资源和服务。每个单元都具有特定的类型,如服务(service)、挂载点(mount)、设备(device)等。常见的单元类型包括:.service:服务单元,如网络服务器、数据库服务。.socket:套接字单元,用于网络或 IPC 套接字。.target:目标单元,用于逻辑分组其他单元,类似于运行级别。.timer:定时器单元,用于代替 cron 任务。
Unit 文件:定义单元行为的配置文件,通常位于
/etc/systemd/system/或/lib/systemd/system/。服务管理命令:管理
systemd单元的命令工具,如systemctl、journalctl。
常用命令
管理服务
启动服务:
1sudo systemctl start <service_name>停止服务:
1sudo systemctl stop <service_name>重启服务:
1sudo systemctl restart <service_name>重新加载服务配置(如果服务支持):
1sudo systemctl reload <service_name>启用服务开机启动:
1sudo systemctl enable <service_name>禁用服务开机启动:
1sudo systemctl disable <service_name>查看服务状态:
1systemctl status <service_name>
查看系统日志
查看所有日志:
1journalctl查看特定服务的日志:
1journalctl -u <service_name>实时查看日志:
1journalctl -f
创建和管理自定义服务
创建服务单元文件
假设你有一个脚本 my_script.sh 想在系统启动时运行,你可以创建一个服务单元文件来管理这个脚本。
编写服务文件: 创建文件
/etc/systemd/system/my_script.service,内容如下:1 2 3 4 5 6 7 8 9 10[Unit] Description=My Custom Script Service After=network.target [Service] ExecStart=/path/to/my_script.sh Restart=on-failure [Install] WantedBy=multi-user.target说明:
[Unit]:描述单元及其依赖关系。After=network.target确保网络服务在该服务之前启动。[Service]:定义服务的执行行为。ExecStart指定启动服务的命令,Restart=on-failure表示在服务失败时自动重启。[Install]:定义服务安装时的行为。WantedBy=multi-user.target指定服务在哪个目标下启动。
重新加载
systemd配置:1sudo systemctl daemon-reload启动并启用服务:
1 2sudo systemctl start my_script.service sudo systemctl enable my_script.service
systemd 提供了强大的系统管理能力,理解和掌握 systemd 可以帮助你更好地管理 Linux 系统服务和资源。
SSH
| |
在这个命令中:
-t ed25519指定了生成的密钥类型为ED25519。-C "k@k.com"添加了一个注释,用于标识密钥。-f /Users/key/id_25519指定了密钥文件的保存路径和文件名。
确保指定的路径是有效的且你有写入权限。如果指定的路径或目录不存在,需要先创建相关的目录。
在生成SSH密钥时,
ssh-keygen会提示你输入一个密码短语(passphrase)。这是对私钥的加密保护,提供额外的安全层。如果私钥文件落入他人之手,没有密码短语的人仍然无法使用它。
以下是密码短语的相关说明和选项:
输入密码短语:输入一个强密码短语,为你的私钥增加保护。如果你选择使用密码短语,每次使用私钥时都需要输入此密码。
留空(不使用密码短语):直接按回车键跳过密码短语设置。这意味着私钥文件没有额外的加密保护,使用时不需要输入密码。尽管这使得使用私钥更加方便,但也意味着私钥如果被盗取,任何人都可以使用它。
密码短语建议:如果选择设置密码短语,建议使用一个强且难以猜测的短语,包含大小写字母、数字和特殊字符,并且长度应足够长。
最终选择取决于你的安全需求和平衡便捷性。对于较高的安全需求,建议设置一个强密码短语。
SSH密钥生成过程中的随机艺术图像(randomart image)是一种用来人类可读形式展示密钥指纹的方法。它由密钥的指纹生成,是密钥的一个视觉表示,通常用于检查或验证密钥的完整性。
随机艺术图像的作用
- 可视化检查:当用户多次连接到同一服务器时,他们可以比较这些图像来验证连接的密钥是否一致。这是一种简单的视觉验证方法。
- 防止钓鱼攻击:它可以帮助用户检测到中间人攻击(MITM),即攻击者伪装成服务器的情况,因为随机艺术图像会因密钥不同而不同。
泄露的影响
泄露随机艺术图像本身通常不会直接带来安全风险,因为它是从密钥指纹派生而来的,而不是密钥本身。以下是需要注意的几点:
不暴露私钥:随机艺术图像并不暴露你的私钥或公钥内容。因此,单独的随机艺术图像不会给恶意用户提供访问权限。
安全实践:尽管如此,保持这些图像的私密性是一个良好的安全实践,尤其是在敏感环境中。虽然它们的泄露不会直接导致密钥被破解,但保持安全信息的私密性总是值得的。
与密钥指纹的关联:如果攻击者能够获取到密钥指纹并进一步关联到某个特定的密钥,那么在某些情况下,这些信息可能被用于尝试破解或进行其他恶意行为。不过,这种情况需要攻击者获取其他敏感信息,单独的随机艺术图像通常不具备这样的风险。
综上所述,随机艺术图像的泄露一般不会带来严重的安全风险,但保持这些信息的私密性仍是良好的做法,特别是在涉及高安全要求的环境中。
在生成SSH密钥对后,接下来你需要将生成的公钥复制到你希望通过SSH访问的服务器上,以便启用无密码登录。以下是详细的步骤:
1. 将公钥添加到服务器
将生成的公钥添加到目标服务器的~/.ssh/authorized_keys文件中。如果服务器上没有这个文件或目录,可以手动创建。
使用ssh-copy-id(推荐)
ssh-copy-id命令是一个便捷的工具,可以将本地公钥复制到远程服务器的authorized_keys文件中。确保已经成功生成密钥对后,执行以下命令:
| |
这里:
/path/to/your/id_ed25519是你的公钥文件路径,通常是~/.ssh/id_ed25519.pub。user是你在远程服务器上的用户名。remote_server_ip是远程服务器的IP地址。
手动复制公钥
如果无法使用ssh-copy-id,可以手动复制公钥:
查看本地公钥的内容:
1cat ~/.ssh/id_ed25519.pub登录到远程服务器:
你需要使用原有的密码登录到服务器。
创建
.ssh目录和authorized_keys文件:1 2 3 4mkdir -p ~/.ssh echo "your_public_key_content" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh将之前复制的公钥内容替换为
your_public_key_content,确保授权文件的权限正确设置。
1. 验证无密码登录
使用生成的私钥文件尝试连接到远程服务器,确保无密码登录工作正常:
| |
这里需要替换:
/path/to/your/id_25519为你的私钥文件路径。user为远程服务器上的用户名。remote_server_ip为远程服务器的IP地址。
2. 检查已添加的密钥
连接到远程服务器后,你可以检查~/.ssh/authorized_keys文件,以确保只有预期的公钥存在:
| |
确认文件中只有你添加的公钥,没有其他未知或不必要的密钥。
3. 禁用密码登录(可选)
如果你确认可以通过SSH密钥成功登录,可以考虑禁用密码登录以提高安全性:
编辑SSH配置文件:
在远程服务器上,使用文本编辑器打开
/etc/ssh/sshd_config文件:1sudo nano /etc/ssh/sshd_config禁用密码认证:
找到或添加以下配置,并确保它们的值为
no:1 2PasswordAuthentication no ChallengeResponseAuthentication no公钥登录为 yes
1PubkeyAuthentication yes重启SSH服务:
保存配置文件并重启SSH服务以应用更改:
1sudo systemctl restart sshd
这些步骤将确保只有拥有正确SSH密钥的用户能够访问服务器,进一步提高系统的安全性。在禁用密码登录之前,务必确保SSH密钥登录功能正常,以避免被锁定在系统之外。
CMD parameter
| |
如果上面的命令都没有的话,尝试
| |
Docker
| |
Go
使用 go get (Go 1.17 及以上)来管理模块的依赖,必须在一个 Go 模块中运行该命令。
1. 初始化 Go 模块
需要在一个 Go 模块内运行 go get。这意味着需要先初始化一个 Go 模块。下面是初始化 Go 模块的步骤:
创建一个新目录并进入该目录
1 2mkdir myproject cd myproject初始化 Go 模块
1go mod init myproject这会创建一个
go.mod文件。使用
go get获取依赖1go get -u github.com/refraction-networking/utls这会将
utls包添加到go.mod文件中,并下载其依赖。
2. 使用 go install 安装命令
如果希望安装一个 Go 程序而不是添加一个模块依赖,可以使用 go install 命令。比如,如果 github.com/refraction-networking/utls 包有一个可执行程序,可以通过以下命令安装:
| |
示例步骤
假设要使用 github.com/refraction-networking/utls 包,以下是完整的操作步骤:
创建并初始化项目
1 2 3mkdir myproject cd myproject go mod init myproject添加依赖
1go get -u github.com/refraction-networking/utls编写代码
创建一个
main.go文件:1 2 3 4 5 6 7 8 9 10package main import ( "fmt" "github.com/refraction-networking/utls" ) func main() { fmt.Println("Hello, utls!") }运行程序
1go run main.go