如何仅使用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