由于 SSH 在容器内运行,因此,如果需要 SSH 支持,则需要将 SSH 从主机传递到容器。
一种选择是在非标准端口上运行容器 SSH(或将主机端口移至非标准端口);
另一个可能更直接的选择是将 SSH 连接从主机转发到容器。
1、安装gitea
端口外部访问
不需要勾选,http访问
走反向代理,SSH访问
走主机的SSH直通
。
2、SSH直通配置
2.1、创建git用户
使用ssh连接
到服务器,输入命令sudo adduser git
创建git用户
。
sudo adduser git
创建账户时,请设置一个强密码并再次输入以确认,创建账户完善所有信息,可直接回车使用默认值直到账户创建完成。
2.2、git用户的UID和GID查看
创建账户时已经显示UID
和GID
,若遗忘可使用命令查看并记录下来。
使用ssh连接
到服务器,输入命令id git
查看,本例中的UID
和GID
均为1000
。
id git
2.3、创建git用户密钥
使用ssh连接
到服务器,输入命令sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
创建密钥,按回车键直至创建完成。
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
注:
发生此错误时,参考2.7、修改git用户文件夹的用户及用户组
2.4、写入公钥到认证文件
使用ssh连接
到服务器,输入命令echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys
,将刚刚创建的公钥信息写入到/home/git/.ssh/authorized_keys
文件。
echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys
2.5、创建脚本文件
在1panel
的系统 - 文件
中进入/usr/local/bin
文件夹,创建gitea
文件,点击权限
位置,将gitea
文件的权限修改为0777
。
编辑gitea
文件,输入下方指令内容:
ssh -p 222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
其中ssh -p 222
的222
端口需要修改为创建gitea容器
时使用的SSH端口
2.6、编辑gitea容器
在1panel
的应用商店 - 已安装
中找到gitea应用,点击参数 - 高级设置
选中编辑compose文件
;
在environment
的下方修改USER_UID
和USER_GID
的值为git用户
的UID
和GID
,修改为实际的数值,本列为1000
。
在volumes
中将主机的 /home/git/.ssh
装入容器。否则,SSH 身份验证将无法在容器内运行。
- /home/git/.ssh/:/data/git/.ssh
2.7、修改git用户文件夹的用户及用户组
在1panel
的系统 - 文件
中进入home
文件夹,点击git文件夹
的用户
或用户组
;
修改git文件夹
的用户
和用户组
均为git
,同时勾选同时修改子文件属性
确保所有文件的用户
和用户组
均为git
。
2.8、增加gitea密钥
在web端添加SSH公钥
;
本地电脑生成SSH 密钥对
:
打开
cmd
终端窗口。运行以下命令来生成
SSH 密钥对
,注意修改邮箱:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按照提示输入文件名(可选),尽量不要更改,避免引起其他麻烦;
按照提示输入密码(可选),设置更安全;
获取
公钥
信息,此公钥
即为输入到gitea
的密钥内容
。
cat ~/.ssh/id_rsa.pub
2.9、测试SSH拉取仓库
创建一个测试用的仓库;
若配置成功,则可以正常拉取仓库代码。
3、1panel安装Fail2ban保护SSH
1panel
安装Fail2ban
:https://1panel.cn/docs/user_manual/toolbox/fail2ban/
3.1、Fail2ban配置
按需修改最大重试次数
、禁用时间
以及发现周期
等;
禁用方式
:推荐选择iptables-multiport
,只禁用22
端口访问,避免自己触发规则后无法访问服务器。
3.2、SSH管理配置
在1panel
的系统 - SSH管理
,推荐关闭密码认证
,配置密钥认证
信息并保存好自己的密钥数据;
root用户
:选择仅允许密钥登录
。