检查是否已为SSH配置RSA

时间:2015-01-17 04:37:20

标签: linux shell encryption rsa

我已经在用户X的服务器A和客户端B之间安装/配置了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吗?

1 个答案:

答案 0 :(得分:1)

RSA(如DSA和ECDSA)是SSH中内置的非对称密码,因此无需“安装”。您可能意味着为您的用户X生成了一个RSA密钥对,并使用该密钥对对服务器A进行公钥认证。

默认情况下,SSH支持各种验证机制,其中公钥验证只有一种(参见man sshd,AUTHENTICATION部分):

  

最后,服务器和客户端进入验证对话框。客户端尝试使用基于主机的身份验证,公钥身份验证,质询 - 响应身份验证或密码身份验证对自身进行身份验证。

按顺序尝试可用的身份验证方法,这意味着在密码身份验证之前尝试进行公钥身份验证。

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

...
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/X/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
Authenticated to servera ([192.168.23.42]:22).
...

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

...
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/Y/.ssh/id_rsa
debug1: Next authentication method: password
Y@servera's password: 

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

PasswordAuthentication no
UsePAM no

并重新启动sshd。重启后,用户Y的登录尝试将失败并显示“权限被拒绝”错误:

...
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/Y/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

您还可以在客户端禁用密码身份验证,可以通过创建文件/home/Y/.ssh/config为特定用户禁用,也可以为/etc/ssh/ssh_config中的所有用户禁用密码身份验证( { {1}}):

sshd_config

如果要将限制限制为特定主机,请将Host * PasswordAuthentication no 替换为主机名。