如何仅使用ssh公共密钥允许从一个IP地址进行root登录
时间:2020-01-09 10:42:35 来源:igfitidea点击:
我在台式机上使用MacOS,在服务器上使用Ubuntu Linux。
我通过ssh禁用了root登录,并启用了基于ssh的公共密钥登录。
但是,我最近添加了第二个Ubuntu服务器。
如何使用rsync命令在两个文件之间同步文件。
有什么方法可以让我以第二个IP地址({root @ secondBOX}#ssh root @ firstBOX1)的root用户从第二台服务器登录到第一台服务器,而又不降低OpenSSH服务器的安全性?
是的,您只能使用"匹配"选项将OpenSSH配置为从一个IP地址或者子网进行root登录。
Match选项充当条件块。
如果满足所有给定条件,则OpenSSH可以覆盖全局节配置文件。
您可以使用"匹配"选项来限制或者授予对sshd功能的访问。
语法
语法非常简单:
Match condition Override config option 1 Override config option 2
您可以使用以下条件:
- ``用户`指定要匹配的用户。例如,如果用户是root用户,则允许使用ssh-key登录,但不允许其他人登录。
组
指定要匹配的组。例如,如果用户在组admin中,则允许登录,但禁止其他任何人。- ``主机`指定要匹配的主机
- ``LocalAddress`指定并匹配通过LocalAddress和LocalPort子句在其上接收到传入连接的本地(监听)地址和端口。
- ``LocalPort`同上。
地址
以CIDR格式指定要匹配的IP地址或者IP /子网。
我应该其中放置"匹配"配置选项?
您必须在配置文件的底部添加配置选项,即/etc/ssh/sshd_config:
$ sudo vi /etc/ssh/sshd_config
或者
$ doas vi /etc/ssh/sshd_config
示例:允许使用ssh-key从192.168.1.5进行root登录,但禁止其他所有人
在/etc/ssh/sshd_config中添加以下内容:
## Block root login to every one ## PermitRootLogin no ## No more password login ## PermitEmptyPasswords no PasswordAuthentication no ## Okay allow root login with public ssh key for 192.168.1.5 ## Match Address 192.168.1.5 PermitRootLogin yes
通过传递-T选项来验证sshd配置:
$ sshd -T
重新加载/重新启动您的sshd服务器,运行:
$ sudo /etc/init.d/ssh reload
或者(Debian/Ubuntu Linux)
$ sudo systemctl reload ssh
或者(CentOS/RHEL/Fedora Linux)
$ sudo systemctl reload sshd
或者(OpenBSD)
$ doas /etc/rc.d/sshd restart
或者(FreeBSD)
$ sudo service sshd restart
您可以按照以下步骤设置多个IP地址/CIDR:
PermitRootLogin no PermitEmptyPasswords no PasswordAuthentication no Match Address 192.168.184.8,192.54.1.1,192.168.1.0/24 PermitRootLogin yes
如何设置条件用户名和IP地址?
您可以按以下方式组合"用户"和"地址"条件,以便允许包括隧道在内的密码登录(一个坏主意):
### somewhere already disabled everything ### PasswordAuthentication no PermitTunnel no ### but we are allowing user Hyman from 192.168.1.0/24 CIDR ### Match User Hyman Address 192.168.1.0/24 PermitTunnel yes PasswordAuthentication yes
使用*和!模式
您可以使用以下模式:
*
匹配零个或者多个字符。?
恰好匹配一个字符。!
模式列表中的模式可以用!取反。
让我们看一些模式匹配的常见示例
## Match 192.168.1.1 to 192.168.1.9 ## Match Address 192.168.1.? PermitRootLogin yes ## Match 192.168.1.{2,3....} ## Match Address 192.168.1.* X11Forwarding no ## Allow any host in the ".home.lan" set of domains ## Match Host *.home.lan X11Forwarding yes ## Allow everyone except foo user ## Match User *,!foo X11Forwarding yes PermitTunnel yes PermitTTY no
匹配条件后可以使用的关键字列表
在手册页中~可用的关键字是
AcceptEnv
AllowAgentForwarding
AllowGroups
AllowStreamLocalForwarding
AllowTcpForwarding
AllowUsers
- 身份验证方法
AuthorizedKeysCommand
AuthorizedKeysCommandUser
AuthorizedKeysFile
AuthorizedPrincipalsCommand
AuthorizedPrincipalsCommandUser
AuthorizedPrincipalsFile
- 横幅
ChrootDirectory
DenyGroups
DenyUsers
ForceCommand
GatewayPorts
- GSSAPIAuthentication
HostbasedAcceptedKeyTypes
- 基于主机的身份验证
HostbasedUsesNameFromPacketOnly
- IPQoS
KbdInteractiveAuthentication
- Kerberos认证
MaxAuthTries
MaxSessions
PasswordAuthentication
PermitEmptyPasswords
PermitOpen
PermitRootLogin
许可证
PermitTunnel
PermitUserRC
PubkeyAcceptedKeyTypes
PubkeyAuthentication
RekeyLimit
RevokedKeys
RhostsRSAAuthentication
- RSAAuthentication
- StreamLocalBindMask
- StreamLocalBindUnlink
TrustedUserCAKeys
- X11DisplayOffset
- X11转发
- X11UseLocalHost
关于使用防火墙的注意事项
您始终可以使用iptables或者pf防火墙,但不能匹配用户名和其他信息来控制对默认sshd tcp端口22的访问题描述:
## Allow our subnet to access for 22 on this box using ufw ## sudo ufw allow from 192.168.1.0/24 to any port 22 ## Allow (insert rule) my workstation to access port 22 on this server ## iptables -I INPUT -s 192.168.1.5 -p tcp -m tcp --dport 22 -j ACCEPT ## Allow port 22 (append rule) ## iptables -A INPUT -s 192.168.1.5 -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT