我正在尝试解决一个奇怪的案例,所以请耐心等待。
我想使用 [不要喘气] 图形 Windows 工具(如 WinSCP、PuTTY 等)签OpenSSH 密钥。这些工具不支持签名密钥。但它们确实支持大量的“转发”和“代理”方法。
我可以为他们设置一个“本地代理”,用于实际执行 OpenSSH 命令和签名的密钥发送到同一台服务器并建立隧道:本地端口2222
转发到服务器的127.0.0.1:22
太好了,现在 Windows 工具可以ssh/scp
通过已认证隧道...但他们尝试做的第一件事是:打开 ssh 并进行身份验证(并且他们无法传递签名的密钥...)。
那么,既然我已经在隧道上进行了身份验证,我可以将远程计算机的 ssh 服务器配置为不是如果通过 127.0.0.1:22 尝试连接,则不询问密码或密钥?
请注意,我说的不是“跳转”服务器以到达“远程”。我只有 1 个“远程”服务器。
总结:
在我的 Ubuntu 服务器上,我想要执行的操作不会被要求输入密钥或密码,但前提是请求来自 127.0.0.1ssh [email protected]
答案1
您可以通过添加以下行来为用户设置一个空密码,并允许从本地主机使用空密码进行身份验证回到顶部文件 /etc/ssh/sshd_config
:
Match Address 127.0.0.*
PermitEmptyPasswords yes
PermitEmptyPasswords
可用的身份验证方法有:“gssapi-with-mic”、“hostbased”、“keyboard-interactive”、“none”(启用时用于访问无密码账户)、“password”和“publickey”。
WinSCP 和 PuTTY 会自动尝试“无”身份验证。因此它们甚至不应该要求输入(空)密码。
感谢@pa4080 建议简化我的解决方案。
答案2
匹配地址 127.0.0.* PermitEmptyPasswords 是
将其放在我的 sshd 配置文件的顶部会导致我的 OpenSSH 服务器崩溃(Ubuntu 19.04)并且重启后无法恢复。将其放在文件底部是指定的方法(请参阅文件底部注释掉的部分)。
引自以下参考文献:
如果满足 Match 行上的所有条件,则以下几行上的关键字将覆盖配置文件全局部分中设置的关键字,直到出现另一个 Match 行或文件末尾。<<
参考: https://man.openbsd.org/sshd_config#AuthenticationMethods