本文主要是为了解决多用户在同一台开发板上开发时导致的Github等ssh key混乱的问题
Linux系统多用户
# 切换到管理员权限
sudo su
# 创建用户wfy(会自动创建home目录)
adduser wfy
# 系统会提示设置密码,输入1(注意:Ubuntu默认要求密码复杂度,简单密码可能需要强制确认)
# 按提示完成用户信息设置(可直接回车跳过)
# 将wfy添加到sudo组
usermod -aG sudo wfy
后续使用 VS Code 或者 cmd 进行 ssh 连接时使用新的账户即可登录。
Github ssh key 生成
使用新用户登陆后,执行命令
ssh-keygen -t ed25519 -C "email address" -f ~/.ssh/id_rsa_github
在 /home/wfy/.ssh会生成2个文件:
- 私钥:id_rsa_github
- 公钥:id_rsa_github.pub
为了让 Git 操作自动使用该用户的密钥,需要在用户的 SSH 配置中指定密钥与 GitHub 的关联。
vim ~/.ssh/config
新增如下内容:
# GitHub配置(wfy用户)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github # 指向当前用户的私钥
然后文件权限
chmod 600 ~/.ssh/config
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa_github # 私钥必须是600权限
将 ~/.ssh/id_rsa_github.pub内容添加到github账户的设置中。
比如测试:
wfy@pat-desktop:~$ ssh -T git@github.com
Hi Hachimi-Manbo! You've successfully authenticated, but GitHub does not provide shell access.
用户权限
在新用户下,使用 sudo su可以访问整台开发板上的所有内容,但是不推荐这样做。
如果调用一些系统库时出现问题,先检查新用户的 bashrc。
为了更好的实现多用户隔离,建议添加用户组。
在默认情况下,/usr /opt 等系统路径是共享的,不需要额外操作,、新用户可使用命令 ls -ld /usr/include 验证,输出应为:drwxr-xr-x。
但是对于初始用户中的一些三方库,如 livox_lidar_sdk等,需要对用户权限进行特别处理。
我们使用用户组方法,先新建一个用户组,用于统一管理权限。
此前先确认系统存在的用户组:
wfy@ubuntu:~$ groups
wfy sudo audio video render i2c gdm weston-launch gpio pat_group
如果是首次创建,先新增用户组:
sudo groupadd pat_group
然后将所有需要共享权限的用户加入该组:
sudo usermod -aG pat_group wfy
sudo usermod -aG pat_group wuba
将用户级开发目录的组权限开放为 读 + 执行。
这里要注意:尽量不要递归的设置整个 /home/pat目录权限,因为这样会破坏 .ssh目录密钥文件的安全权限,导致Github SSH连接失效。
如果其他用户已经完成了下面操作,你不需要再重复进行。
# 1. 仅修改需要共享的Deps目录(及子目录/文件)的所属组
sudo chgrp -R pat_group /home/pat/Deps
# 2. 仅给Deps目录添加组rx权限
sudo chmod -R g+rx /home/pat/Deps
# 3. 给/home/pat目录添加组rx权限(让wfy能进入pat的家目录),但不递归(保留.ssh等目录的权限)
sudo chgrp pat_group /home/pat
sudo chmod g+rx /home/pat
# (可选)如果pat用户的.ssh权限已被破坏,执行以下命令恢复
# 如果还未创建.ssh等内容,无需修改,但是注意后面用户不要修改.ssh权限
chmod 700 /home/pat/.ssh
chmod 600 /home/pat/.ssh/*
chmod 644 /home/pat/.ssh/*.pub # 公钥文件可以是644
操作完成后,reboot。
测试:
# 测试系统级头文件
cat /usr/include/stdio.h
# 测试用户级开发库,应该能读取到内容
cat /home/pat/Deps/ws_livox/install/setup.bash
其他设置
.bashrc文件可能需要复制过来。
记得先检查主用户中的 bashrc是否涉及到不可访问的绝对路径。
# 追加内容到现有用户的bashrc
cat /home/pat/.bashrc >> ~/.bashrc
# 确保.bashrc属于wfy用户和用户组
# .bashrc这类私有配置文件推荐用wfy:wfy用户私有组
# 共享的开发文件可根据需求用wfy:pat_group
sudo chown wfy:wfy ~/.bashrc
# 确保权限正确(默认644即可)
chmod 644 ~/.bashrc