自建的Gitlab服务器在阿里云上,阿里云默认屏蔽了对外的25端口连接。每添加新用户,就会反馈重置密码的邮件收不到。解决方法是登录到服务器上用mailq命令找到邮件ID,接着用postcat命令找出链接发给对方完成密码重置工作。

这次的新用户比较奇怪(也可能是gitlab升级),使用postcat获取到的链接无效,无法重置密码。为了让其正常使用,先从管理员身份切换过去并添加SSH公钥。

事后为了解决这个问题,暂时想到两个办法:1. 使用海外的服务器;2. 使用465等SSL加密端口。第一个方法作为备选方案,优先考虑了第二种方案。遗憾的是按照官方文档配置,Gitlab不屈不挠的使用sendmail而非SMTP方式发送邮件。折腾了一个多小时还没弄好,有点心累。

快要放弃的时候转念一想,我需要的是重置密码功能,邮件先放一边吧!于是开始寻找重置用户密码方法,该过程可谓是轻松加愉快,很快就重置了用户的密码。

具体步骤如下:

# 进入gitlab控制台
gitlab-rails console
# 找出用户并重置密码
user = User.find_by(email: 'example@xxx.com')
user.password='1234ABCD'
user.password_confirmation='1234ABCD'
user.save!
# 退出控制台
exit

输出内容示例如下:

[root@localhost gitlab]# gitlab-rails console
Loading production environment (Rails 4.2.8)
irb(main):001:0> user = User.find_by(email: 'example@xxx.com')
=> #
irb(main):002:0> user.password='1234ABCD'
=> "1234ABCD"
irb(main):003:0> user.password_confirmation='1234ABCD'
=> "1234ABCD"
irb(main):004:0> user.save!
Enqueued ActionMailer::DeliveryJob (Job ID: ea0072d2-5cd5-4b6e-bdad-fa938d977e47) to Sidekiq(mailers) with arguments: "DeviseMailer", "password_change", "deliver_now", gid://gitlab/User/12
=> true

参考

  1. https://docs.gitlab.com/omnibus/settings/smtp.html#testing-the-smtp-configuration
  2. https://stackoverflow.com/questions/24448475/gitlab-password-reset-in-rails