检查是否为 SSH 配置了 RSA

Check if RSA has been configured for SSH

我使用用户 X 在我的服务器 A 和客户端 B 之间使用 installed/configured RSA 加密。当我以用户 X 身份执行脚本时,我的脚本工作正常,但我也想考虑不同的场景
1. 如果用户 Y 执行它提示输入密码身份验证的脚本,而不是我希望脚本抛出错误并继续。
2. 如果客户端 C 没有配置服务器 A(rsa 加密),我想抛出一个不同的错误并继续。

当前脚本

ssh $server_name 'mcell -q -n "'"$i"'" ' || echo " Failed to SSH "

问题:
1. 我可以检查是否在 SSH 之前安装了 RSA 吗?
2. 我可以在调用 SSH 之前检查客户端安装了哪个用户 RSA 吗?

RSA(如 DSA 和 ECDSA)是内置于 SSH 中的非对称密码,因此 "install" 没有任何意义。您可能是说您为用户 X 生成了一个 RSA 密钥对,并将该密钥对用于针对服务器 A 的 public 密钥身份验证。

默认SSH支持多种认证机制,其中public密钥认证只是一种(见man sshd,AUTHENTICATION部分):

Finally, the server and the client enter an authentication dialog. The client tries to authenticate itself using host-based authentication, public key authentication, challenge-response authentication, or password authentication.

可用的验证方式是按顺序尝试的,即先尝试public密钥验证,再尝试密码验证。

如果您 运行 ssh -v 使用您的用户 X,您将得到如下调试输出:

...
debug1: SSH2_MSG_SERVICE_REQUEST 已发送
debug1: SSH2_MSG_SERVICE_ACCEPT 收到
debug1: <b>可以继续的验证: publickey,password</b>
debug1: <b>下一个认证方式: publickey</b>
debug1:提供 RSA public 密钥:/home/X/.ssh/id_rsa
debug1:服务器接受密钥:pkalg ssh-rsa blen 535
debug1:在第 6 级启用压缩。
debug1: <b>验证成功(public密钥)。</b>
已通过服务器验证([192.168.23.42]:22)。
...

而对于用户 Y,输出将如下所示:

...
debug1: SSH2_MSG_SERVICE_REQUEST 已发送
debug1: SSH2_MSG_SERVICE_ACCEPT 收到
debug1: <b>可以继续的验证: publickey,password</b>
debug1: <b>下一个认证方式: publickey</b>
debug1:正在尝试私钥:/home/Y/.ssh/id_rsa
debug1: <b>下一步验证方式:密码</b>
Y@servera 的密码:

用户Y没有私钥,认证方式失败,接下来尝试密码认证。为防止您需要将以下行添加到服务器的 sshd_config:

PasswordAuthentication no
UsePAM no

并重新启动 sshd。重新启动后,用户 Y 的登录尝试将失败并出现 "permission denied" 错误:

...
debug1: SSH2_MSG_SERVICE_REQUEST 已发送
debug1: SSH2_MSG_SERVICE_ACCEPT 收到
debug1:<b>可以继续的身份验证:publickey</b>
debug1: <b>下一个认证方式: publickey</b>
debug1:正在尝试私钥:/home/Y/.ssh/id_rsa
debug1:<b>可以继续的身份验证:publickey</b>
debug1: <b>没有更多的身份验证方法可以尝试。</b>
<b>权限被拒绝(public密钥)。</b>

您还可以在客户端禁用密码验证,通过创建文件 /home/Y/.ssh/config 为特定用户禁用,或者为 /etc/ssh/ssh_config 中的所有用户禁用(不是 sshd_config):

Host *
  PasswordAuthentication no

如果您想限制对特定主机的限制,请将 * 替换为主机名。