SSH指定用户登录与限制

ssh · 浏览次数 : 20

正文

环境准备

:::info
实验目标:ServerA通过用户ServerB(已发送密钥和指定端口)
:::

主机 IP 身份
ServerA 192.168.10.201 SSH客户端
ServerB 192.168.10.202 SSH目标主机

在使用SSH登录远程主机时,指定的用户名是指远程主机上的用户。命令格式如下:

ssh username@remote_host

这里的 username 是指您打算用来登录远程目标主机的用户名,这个用户必须存在于远程目标主机的系统中,并且具有相应的访问权限。remote_host 则代表您想要连接的远程服务器的IP地址或域名。
举例来说,如果您要使用名为 myuser 的用户账户登录IP地址为 192.168.0.100 的远程服务器,命令应写作:

ssh myuser@192.168.0.100

在这个命令中:
myuser 是您指定的用户名,对应的是远程服务器上已经存在的用户账户。
192.168.0.100 是远程主机的IP地址
执行此命令后,SSH客户端会尝试使用您本机当前用户的公钥(如果有已配置的密钥对认证)或提示您输入 myuser 账户在远程主机上的密码来进行身份验证。一旦身份验证成功,您将获得 myuser 用户在远程服务器上的 shell 终端会话。
总结来说,通过SSH登录远程主机时指定的用户名是指远程主机上的用户,而不是本机用户。本机用户的信息仅用于确定本地的SSH客户端配置(如私钥位置)以及可能的代理转发设置等,但实际登录远程服务器时的身份是由您提供的远程用户名决定的。

禁止root登录

root登录测试

[root@ServerA ~]# ssh -p 5000 root@ServerB
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last failed login: Thu Apr 18 03:59:14 EDT 2024 from 192.168.10.201 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Apr 18 03:56:51 2024 from 192.168.10.201
[root@ServerB ~]# 注销

取消注释改为no

(如果不注销配置则无法生效)
image.png

root用户测试

[root@ServerA ~]# ssh -p 5000 root@ServerB
root@serverb's password: 
Permission denied, please try again.
root@serverb's password: 
Permission denied, please try again.
root@serverb's password: 
root@serverb: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

image.png

允许禁止某用户登录

远程主机创建用户

[root@Serverb ~]# useradd zhangsan 
[root@Serverb ~]# passwd zhangsan 
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@Serverb ~]# useradd lisi
[root@Serverb ~]# passwd lisi 
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

两个用户都可以远程登录

[root@servera ~]# ssh zhangsan@ServerB -p 5000
zhangsan@serverb's password: 
Last login: Fri Jul 12 14:33:34 2024 from servera
[zhangsan@serverb ~]$ exit
logout
Connection to serverb closed.
[root@servera ~]# ssh lisi@ServerB -p 5000
lisi@serverb's password: 
Last login: Fri Jul 12 11:24:26 2024 from servera
[lisi@serverb ~]$ exit
logout
Connection to serverb closed.
[root@servera ~]# 

底部添加参数允许zhangsan拒绝lisi

image.png

[root@Serverb ~]# vim /etc/ssh/sshd_config 
[root@Serverb ~]# systemctl restart sshd.service 
[root@Serverb ~]# tail -n 3 /etc/ssh/sshd_config 
#	ForceCommand cvs server
AllowUsers zhangsan
DenyUsers lisi
[root@Serverb ~]# 

测试登录

张三允许登录

[root@servera ~]# ssh zhangsan@ServerB -p 5000
zhangsan@serverb's password: 
Last login: Fri Jul 12 14:42:10 2024 from servera
[zhangsan@serverb ~]$ exit
logout
Connection to serverb closed.

李四禁止登录

[root@servera ~]# ssh lisi@ServerB -p 5000
lisi@serverb's password: 
Permission denied, please try again.
lisi@serverb's password: 
Permission denied, please try again.
lisi@serverb's password: 

Pam模块禁止用户

ServerB

只允许李四登录

[root@serverb ~]# echo "lisi" | sudo tee /etc/ssh/allowed_users
lisi
[root@serverb ~]# cat /etc/ssh/allowed_users
lisirverB ~]# chmod 644 /etc/ssh/allowed_users
[root@Serverb ~]# systemctl restart sshd.service 
[root@Serverb ~]# tail -n 1 /etc/ssh/sshd_config 
#	ForceCommand cvs server
[root@Serverb ~]# tail -n 1 /etc/pam.d/sshd 
auth required pam_listfile.so item=user sense=allow onerr=fail file=/etc/ssh/allowed_users

张三禁止登录

[root@servera ~]# ssh zhangsan@ServerB -p 5000
zhangsan@serverb's password: 
Permission denied, please try again.
zhangsan@serverb's password: 
Permission denied, please try again.
zhangsan@serverb's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

李四可登录

[root@servera ~]# ssh lisi@ServerB -p 5000
lisi@serverb's password: 
Last login: Fri Jul 12 14:50:03 2024 from servera

Match User模块

ServerB

使用模块禁止李四

[root@ServerB ~]# vim /etc/ssh/sshd_config 
[root@ServerB ~]# tail -n 6 /etc/ssh/sshd_config 
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server
Match User lisi
    PermitTTY no
    ForceCommand /bin/false
[root@ServerB ~]# systemctl restart sshd.service 

这里,PermitTTY no禁止分配伪终端,ForceCommand /bin/false设置了一个无效的命令,确保用户无法成功登录。

ServerA

张三用户可登录

[root@servera ~]# ssh zhangsan@ServerB -p 5000
zhangsan@serverb's password: 
Last login: Fri Jul 12 15:01:09 2024 from servera
[zhangsan@serverb ~]$ exit
logout
Connection to serverb closed.

李四用户不可登录

[root@servera ~]# ssh lisi@ServerB -p 5000
lisi@serverb's password: 
PTY allocation request failed on channel 0
Connection to serverb closed.

指定其他用户免密登录

ServerA

Server通过指定端口将密钥发送到对应用户文件夹下

[root@servera ~]# ssh-copy-id -i .ssh/id_rsa.pub  -p 5000 zhangsan@ServerB
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
zhangsan@serverb's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -p '5000' 'zhangsan@ServerB'"
and check to make sure that only the key(s) you wanted were added.

ServerB

[root@ServerB ~]# systemctl restart sshd.service 
[root@ServerB ~]# ll /home/zhangsan/.ssh/
总用量 4
-rw-------. 1 zhangsan zhangsan 580 4月  18 04:35 authorized_keys
[root@ServerB ~]# 

ServerA登录

[root@servera ~]# ssh zhangsan@ServerB -p 5000
Last login: Fri Jul 12 15:05:21 2024 from servera
[zhangsan@serverb ~]$ exit
logout
Connection to serverb closed.

禁止密码登录

PasswordAuthentication no

密码登录测试与免密测试

[root@servera ~]# ssh lisi@ServerB -p 5000
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[root@servera ~]# ssh zhangsan@ServerB -p 5000
Last login: Fri Jul 12 15:06:25 2024 from servera
[zhangsan@serverb ~]$ exit
logout
Connection to serverb closed.

指定用户和IP登录

AllowUsers zhangsan@192.168.10.201

拒绝登录

[root@localhost ~]# ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.128  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::3429:206b:def4:69f2  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:be:62:ce  txqueuelen 1000  (Ethernet)
        RX packets 1453  bytes 1745198 (1.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 859  bytes 68106 (66.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# ssh zhangsan@192.168.10.202 -p 5000
zhangsan@192.168.10.202's password: 
Permission denied, please try again.
zhangsan@192.168.10.202's password: 
Permission denied, please try again.
zhangsan@192.168.10.202's password: 

允许地址登录

[root@servera ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.201  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::c086:7d71:44a8:c234  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:9f:70:a6  txqueuelen 1000  (Ethernet)
        RX packets 811  bytes 153103 (149.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 993  bytes 212878 (207.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@servera ~]# ssh zhangsan@ServerB -p 5000
Last failed login: Fri Jul 12 15:58:09 CST 2024 from 192.168.10.128 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Fri Jul 12 15:24:32 2024 from servera
[zhangsan@serverb ~]$ 

与SSH指定用户登录与限制相似的内容:

SSH指定用户登录与限制

环境准备 :::info 实验目标:ServerA通过用户ServerB(已发送密钥和指定端口) ::: 主机 IP 身份 ServerA 192.168.10.201 SSH客户端 ServerB 192.168.10.202 SSH目标主机 在使用SSH登录远程主机时,指定的用户名是指远程主机上

[转帖]Linux 启动或禁止用户或 IP 通过 SSH 登录

https://www.jianshu.com/p/495f2d34eec2 限制用户 SSH 登录 1.只允许指定用户进行登录(白名单):在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers 选项,(配置完成需要重启 SSHD 服务)格式如下: AllowUsers

[转帖]Shell编程之免交互

目录 交互的概念与Linux中的运用Here Document 免交互tee命令重定向输出加标准输出支持变量替换多行注释Expect实例操作免交互预设值修改用户密码创建用户并设置密码实现 ssh 自动登录 交互的概念与Linux中的运用 交互:当计算机播放某多媒体程序的时候,编程人员可以发出指令控制

Mac上使用Royal TSX快速连接到OCI主机

**问题:** 每次使用Royal TSX连接到OCI主机都要交互式输入opc这个用户名,次数多了也蛮烦。 那如何既指定用户名,又想要通过ssh私钥登陆机器呢? 这个需求确实很初级,但也着实困扰过我,因为开始我真的以为不支持,认为这两种连接方式只能选其一。结果没想到人家是可以组合使用实现这样的需求。

[转帖]rsync指定密码文件

rsync -Pav -e "ssh -i xxx/xxx1 -p xxx2" username@serverip:source_data_path target_path xxx/xxx1::密钥文件位置 xxx2:端口 source_data_path:源文件路径 target_path:传输目

玄机-第二章日志分析-apache日志分析

玄机-第二章日志分析-apache日志分析 简介 账号密码 root apacherizhi ssh root@IP 1、提交当天访问次数最多的IP,即黑客IP: 2、黑客使用的浏览器指纹是什么,提交指纹的md5: 3、查看index.php页面被访问的次数,提交次数: 4、查看黑客IP访问了多少次...

[转帖]spawn....expect简介及EOF遇到的坑

spawn....expect简介及EOF遇到的坑 为什么使用spawn expect ....expectexpect命令命令演示在shell脚本中使用expect 为什么使用spawn expect … 很多时候,指令的执行是需要交互的,比如下面这个命令大家一定很熟悉: ssh-keygen -

为ssh服务器添加2fa认证,一个python脚本全搞定

服务器ssh如果被别人登陆就是一场灾难,所以我研究了ssh认证,我发现Google Authenticator PAM可以实现ssh的2fa认证,但是安装和配置比较麻烦。因此我用python实现了ssh的2fa认证。考虑到很多Linux服务器默认安装python,所以我用py脚本,并只使用标准库,不

番外1.ssh连接管理器

[TOC] # 本篇前瞻 学习完go语言基础的专栏,我们究竟写出怎么样的实用工具呢?我在github上开源的[ssh连接管理器](https://github.com/Breeze0806/ssh-mgr)就是一个比较好的样例。 # 项目背景 这个项目的背景是之前我在上班时连接生产机器时只能使用“s

[转帖]把SSH客户端放在网页上运行?这个开源项目教你部署实现

https://zhuanlan.zhihu.com/p/420301596 有时候为了管理服务器,又不想去下载各种各样的客户端,只是想在ipad、手机上操作一下,这款SSH开源客户端工具一定适合你,运行在网页端,只要有浏览器的设备就能访问使用。 环境准备 我们的主角依然是docker,采用最方便的