git的多账户公钥配置简略

本文介绍如何在Linux环境下为不同账户配置SSH公钥,通过设置~/.ssh/config文件及各账户下的.git/config来实现多账户间的区分管理,确保每个账户能够独立地访问对应的远程仓库。

linux下配置多账户公钥要在~/.ssh目录下新增config文件。
config配置如下:
这里写图片描述
其中重要的是:
- host:本地映射主机名
- hostname:远程主机名
- identityfile:公钥
比如在上图所示的config文件中,将coding.net指向coding.net,将basketball.net也指向coding.net,但是两个host配置的公钥是不同的。
对不同账户的git项目下/.git/config文件进行相应的配置。
比如test1用户使用id_rsa公钥,test2用户使用id_rsa_basketball公钥。

对test1用户需配置项如下:

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@coding.net:test1/test.git

对test2用户需配置项如下:

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@basketball.net:test2/test.git

然后执行git的pull操作,两个账户的项目均可以操作。此时,已经达到我们要实现的多账户公钥配置目的。

需要注意的是,在第一次进行git的pull操作的时候,会提示你是否在~/.ssh目录下生成known_hosts文件。known_hosts文件是记录每次ssh在链接远程服务器的时候,远程服务器给出的host key。当下次链接的时候,ssh会自动检测改host key是否正确。

<think>我们参考上述引用内容,整理出在Ubuntu系统上搭建Git服务器并配置SSH公钥的步骤。 主要步骤包括:安装Git、创建git用户、创建Git仓库、配置SSH公钥(免密登录)、禁止git用户shell登录(安全设置)等。 具体步骤如下: 1. 安装Git 在服务器上安装Git软件包。 2. 创建git用户 创建一个专门用于运行Git服务的用户,通常命名为git。 3. 创建Git仓库 在git用户的家目录下创建仓库目录,并初始化一个裸仓库。 4. 配置SSH公钥(实现免密登录) 在服务器上配置客户端的公钥,这样客户端就可以通过SSH协议免密登录服务器进行Git操作。 5. 禁止git用户shell登录(安全设置) 修改git用户的shell为git-shell,这样git用户只能进行Git操作,而不能获得普通的shell访问权限。 下面我们详细展开每一步: ### 1. 安装Git 使用apt包管理器安装Git: ```bash sudo apt update sudo apt install git ``` ### 2. 创建git用户 创建一个名为git的用户,并设置其家目录(通常为/home/git): ```bash sudo adduser git ``` 在创建过程中会要求设置密码,但因为我们后面会使用SSH公钥认证,所以密码可以设置一个强密码(或者留空,但不推荐),即使设置了密码,我们也会禁止该用户通过密码登录。 ### 3. 创建Git仓库 假设我们要在`/home/git`下创建一个名为`project.git`的仓库: ```bash # 切换到git用户(注意:这里我们使用sudo切换到git用户,因为刚创建的用户可能没有登录权限) sudo -u git mkdir /home/git/project.git cd /home/git/project.git # 初始化一个裸仓库(裸仓库没有工作目录,适合作为服务器仓库) sudo -u git git init --bare ``` 裸仓库的命名通常以`.git`结尾。 ### 4. 配置SSH公钥(免密登录) 这一步需要将客户端的公钥添加到服务器git用户的`authorized_keys`文件中。 首先,在客户端生成SSH密钥对(如果还没有的话): ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 生成的公钥文件默认在`~/.ssh/id_rsa.pub`。 然后,将客户端的公钥内容添加到服务器上git用户的`~/.ssh/authorized_keys`文件中。 在服务器上操作: ```bash # 切换到git用户 sudo -u git mkdir -p /home/git/.ssh sudo -u git touch /home/git/.ssh/authorized_keys # 编辑authorized_keys文件,将客户端的公钥内容复制进去(注意:多个公钥之间换行) sudo -u git vim /home/git/.ssh/authorized_keys ``` 或者,也可以将客户端公钥文件上传到服务器,然后追加到authorized_keys文件中: ```bash cat id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys ``` 设置权限: ```bash sudo -u git chmod 700 /home/git/.ssh sudo -u git chmod 600 /home/git/.ssh/authorized_keys ``` ### 5. 禁止git用户shell登录 为了安全,我们需要禁止git用户通过shell登录,而是限制其只能使用Git相关命令。这可以通过修改`/etc/passwd`文件来实现。 找到git用户所在行,将其shell从`/bin/bash`(或`/bin/sh`)改为`/usr/bin/git-shell`(确保git-shell的路径正确,通常为`/usr/bin/git-shell`): ```bash sudo vim /etc/passwd ``` 修改前: ``` git:x:1001:1001:,,,:/home/git:/bin/bash ``` 修改后: ``` git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell ``` 保存退出。 现在,git用户只能通过SSH进行Git操作,而不能获得交互式shell。 ### 测试 在客户端,可以尝试克隆仓库: ```bash git clone git@server_ip:/home/git/project.git ``` 其中`server_ip`是服务器的IP地址。 如果配置正确,应该可以成功克隆而不需要输入密码。 注意:如果服务器SSH端口不是默认的22,需要在URL中指定端口,例如: ```bash git clone ssh://git@server_ip:port/home/git/project.git ``` 以上步骤完成了Ubuntu上Git服务器的搭建和SSH公钥配置。 引用说明: 在创建用户和禁止shell登录部分,参考了引用[2][4][5];在配置SSH公钥部分,参考了引用[1][2][3]。 §§相关问题§§ 1. 如何为多个客户端配置SSH公钥? 2. 如何修改Git仓库的访问权限? 3. 如何配置Git服务器使用HTTPS协议?</think>### Ubuntu 搭建 Git 服务器并配置 SSH 公钥步骤 #### 1. **安装 Git** ```bash sudo apt update sudo apt install git -y ``` #### 2. **创建 Git 专用用户** ```bash sudo adduser git # 按提示设置密码(后续会禁用登录) sudo passwd git # 可选:修改密码 ``` #### 3. **初始化 Git 仓库** ```bash sudo mkdir -p /home/git/repos/project.git sudo git init --bare /home/git/repos/project.git sudo chown -R git:git /home/git/repos ``` #### 4. **配置 SSH 公钥认证** ##### (1) **客户端生成 SSH 密钥**(在本地电脑操作) ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 默认保存到 ~/.ssh/id_rsa ``` ##### (2) **服务器添加公钥** ```bash # 切换到 git 用户 sudo -u git mkdir -p /home/git/.ssh sudo -u git touch /home/git/.ssh/authorized_keys # 将客户端的公钥(id_rsa.pub)内容追加到文件(多个公钥需换行) sudo -u git vim /home/git/.ssh/authorized_keys # 粘贴公钥内容 # 设置权限 sudo -u git chmod 700 /home/git/.ssh sudo -u git chmod 600 /home/git/.ssh/authorized_keys ``` #### 5. **禁用 Git 用户 Shell 登录**(安全加固) ```bash sudo vim /etc/passwd ``` 找到此行并修改: ```diff - git:x:1001:1001::/home/git:/bin/bash + git:x:1001:1001::/home/git:/usr/bin/git-shell # 替换为 git-shell ``` #### 6. **测试连接**(在客户端操作) ```bash git clone git@服务器IP:/home/git/repos/project.git ``` 成功克隆即表示配置完成[^2][^4]。 --- ### 关键配置说明 1. **裸仓库**:`git init --bare` 创建无工作目录的仓库,专用于服务器[^1]。 2. **权限控制**:`chown -R git:git` 确保仓库归属正确[^4]。 3. **安全加固**:禁用 shell 登录后,git 用户仅能执行 Git 操作[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值