ssh 实现指定用户仅认证不登录

CListery ARE YOU OK?

当我们有 ssh 代理代理转发的需求时,就可以在跳板机上做一个仅任认证不登录的用户,用来防止跳板机被以外登录

创建用户

1
sudo adduser jump

配置 sshd

先切换到 jump 用户

欢迎信息

vim /home/jump/banner

1
Ok! You've successfully authenticated.

创建 authorized_keys

1
2
mkdir /home/jump/.ssh && chmod 755 /home/jump/.ssh
vim /home/jump/.ssh/authorized_keys

将公钥添加到 authorized_keys 文件中

修改 sshd_config

1
sudo vim /etc/ssh/sshd_config

将下面的内容添加到 sshd_config 文件末尾

1
2
3
4
5
Match User jump
Banner /home/jump/banner
AuthorizedKeysFile /home/jump/.ssh/authorized_keys
PasswordAuthentication no
PubkeyAuthentication yes

重启 sshd

1
/etc/init.d/ssh restart

到这里就可以通过正常的 ssh 方式登录 jump 用户了,而且登录时第一行会看到 banner 文件中的内容

修改 shell (禁用登录)

vim /etc/passwd

找到 jump,将最后的 /bin/bash 改为 /bin/false

现在再通过 ssh 的方式登录,会先登录成功,然后紧接着就被关闭连接

到这里就已经基本实现了仅认证不登录的实现

优化部分

去除登录后显示的系统信息登录信息

在登录成功后默认会展示一大堆内容,这些是不需要的,所以如何隐藏它?

很简单,直接在 jump 用户目录下创建一个 .hushlogin 文件即可

1
touch /home/jump/.hushlogin

然后再通过 ssh 登录就看不到默认输出的一大堆内容了,就只会看到 banner 文件中的内容

优化显示登录信息

如果只想显示登录信息改如何修改?

还是先按照上面的内容,通过创建 .hushlogin 文件去除默认信息

然后再通过创建 rc 文件

1
vim /home/jump/.ssh/rc

将以下内容写入到 rc 文件中

1
lastlog -u $USER | perl -lane 'END{print "Last login: @F[3..6] $F[8] from $F[2]"}'

再通过 ssh 登录,就只会看到上一次的登录信息了

  • 标题: ssh 实现指定用户仅认证不登录
  • 作者: CListery
  • 创建于 : 2022-11-15 11:05:16
  • 更新于 : 2026-01-23 16:48:26
  • 链接: http://clistery.github.io/2022/11/15/ubuntu/ssh-no-login/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论