如何批准特定计算机ssh到禁用密码身份validation的计算机?

help.ubuntu.com/community/SSH/OpenSSH/Configuring中的说明建议禁用密码validation,以便“只能从您经过特别批准的计算机进行连接”。 但他们没有说明如何专门批准计算机。 我怎么做?

在您希望有权访问服务器的每个用户上,在终端中运行:

ssh-keygen ssh-copy-id @ 

它会问你在哪里保存它,默认就好了。 它会要求您输入密码。 这是为了加密密钥,以防计算机被盗或受到损害。 如果您不想使用密码短语,则会将两个密码短语提示留空。

第一个命令为运行它的用户创建一个ssh密钥。 第二个命令ssh进入服务器并将当前用户的密钥添加到服务器允许登录的人员列表中。 由于ssh-copy-id使用ssh,因此在禁用密码登录之前需要执行此操作。

SSH密钥是两个匹配的一半。 一半告诉大家,另一半是保密的。 使用数学算法,公共一半可用于解密用私钥加密的数据。 如果数据使用公钥成功解密,您毫无疑问地知道它是加密它的密钥的私有部分。 因此,当您使用ssh密钥登录时,客户端会发送一条消息(使用私钥加密),该消息基本上是“让我进去”。 服务器使用公钥进行检查,如果公钥在允许的计算机列表中,则登录成功。

ssh-copy-id是(使用ssh)将公共一半复制到允许登录的密钥的服务器列表中(该列表存储在/home//.ssh/authorized_keys2,或者在root的情况下) /root/.ssh/authorized_keys2)。 如果您已禁用密码身份validation,则仍可以添加计算机。 您只需将公钥(在客户端计算机上的/home/username/.ssh/id_rsa.pub)复制到类似USB记忆棒的东西,然后将id_rsa.pub的内容添加到/ home / <的末尾用户名> / .ssh / authorized_keys2服务器上的文件。 (您可以通过在服务器上运行cat /media/USB/stick/path/to/id_rsa.pub >>/home//.ssh/authorized_keys2等命令来完成此操作。)

iptables的

如果计算机具有某个ip-range,则可以使用iptables来控制访问。 Iptables是内核的一部分。 您可以在/etc/iptables文件中控制它们

 # from /etc/iptables *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT # # loopback device # -A RH-Firewall-1-INPUT -i lo -j ACCEPT # # all connections already established (started outgoing from my machine) # -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # # but SSH - restricted # -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 138.232.0.0/255.255.0.0 -j ACCEPT # # block all others (without answering - thus nobody is able to scan the network) # -A INPUT -p icmp --icmp-type echo-request -j DROP -A RH-Firewall-1-INPUT -j DROP COMMIT 

有趣的是这一行:

 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 111.111.0.0/255.255.0.0 -j ACCEPT 

Prot 22是默认的ssh端口。 如果它与您的机器不同,请更改它。 111.111.0.0/255.255.0.0 -j ACCEPT表示它接受来自’111.111.foo.bar’的所有连接,其中’foo’和’bar’为任意3位数。