我已经在用户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吗?
答案 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
替换为主机名。