我正在连接到一个 SSH 服务器,但我无法完全控制 sshd 配置。服务器允许公钥身份验证和密码身份验证,但我想阻止我的 SSH客户即使公钥身份验证失败,也不会切换到密码身份验证。
我尝试添加PasswordAuthentication no
到服务器条目,~/.ssh/config
但没有明显的效果。
有可能吗?
我了解这不会提供任何额外的安全性。我这样做只是为了用户体验目的,以避免某些应用程序陷入等待密码的情况。
答案1
ssh
如果处于批处理模式,则不会提示:
ssh -oBatchMode=yes you@theotherhost command
你可以设置
alias ssh /usr/bin/ssh -oBatchMode=yes
在您的中.bashrc
,这将禁用客户端对交互式会话的密码身份验证。 (除非你这样做/us/bin/ssh
)
更详细的方案可能是:
- 确保
/usr/local/bin
在PATH
之前/usr/bin
- 创建一个文件
/usr/local/bin/ssh
:
#!/bin/bash
/usr/bin/ssh $*
chmod a+rx /usr/local/bin/ssh
然而,这一切都不是万无一失的。
答案2
客户端命令或~/.ssh/config
:
在这里您可以找到适合您的解决方案的一些可能性
要禁用当前 ssh 连接尝试的密码身份验证,请在命令行上传递此选项:
-o PasswordAuthentication=no
要禁用与任何主机的所有未来连接的密码身份验证,请将以下内容添加到 ~/.ssh/config 中:
PasswordAuthentication no
在命令行(或 ~/.ssh/config)上,您可以设置 PreferredAuthentications。
PreferredAuthentications=publickey
执行此操作的规范方法是使用 BatchMode 选项:
ssh -o BatchMode=yes …
远程/服务器端/etc/ssh/sshd_config
:
如果不想使用密码,您可以在/etc/ssh/sshd_config
远程计算机上进行更改PasswordAuthentication no
sshd_config 远程机器中的一些常规设置:
PermitRootLogin no # No root login
PasswordAuthentication no # No password login
PermitEmptyPasswords no # No empty password
PubkeyAuthentication yes # login with public key
编辑后重新启动您的服务