如果 SSH shell 和 passwd 命令均被禁用,如何更改 ssh/sftp 密码

如果 SSH shell 和 passwd 命令均被禁用,如何更改 ssh/sftp 密码

WinSCP文档说

如果你的 SSH 服务器允许更改你的账户密码,请前往会话 > 更改密码请求那个。

事实上,WinSCP 可以更改我们使用的服务器上的 SSH/SFTP 密码(但我们无法管理它)。

我努力了:

  • ssh user@server失败 ->“通道 0 上的 shell 请求失败”

  • ssh user@server passwd也失败了 ->“通道 0 上的执行请求失败”

还有什么其他方法可以更改密码(从命令行)?

WinSCP 在 Windows 上运行。我喜欢在 Linux 上运行命令行命令。但如果有 Python 解决方案,那也不错。

至少我想知道合理猜测如果上述选项不起作用,WinSCP 将如何更改密码。

  • sftp> version返回 “SFTP 协议版本 3”

  • sftp > help似乎没有返回任何有用的密码更改命令

答案1

如果您没有 shell 访问权限,也没有任何其他界面来更改密码,您将必须使用消息SSH2_MSG_USERAUTH_REQUEST来更改密码(这就是 WinSCP 所做的)

常见的 Linux SSH 工具集 OpenSSH 无法通过这种方式请求更改密码。我不知道有任何其他 Linux 命令行工具可以这样做。


在 Python 中实现这一点绝对是可能的。不过在我看来,常见的 Python SSH 库 Paramiko 也不支持这一点。

但如果你稍微修改一下代码,它就可以做到。找到以下_parse_service_accept代码auth_handler.py

m.add_boolean(False)
password = b(self.password)
m.add_string(password)

并将其更改为:

m.add_boolean(True) # Yes, change password
password = b(self.password)
m.add_string(password)
m.add_string(b("newpassword"))

(但我没有测试过)


或者您可以使用 Wine 在 Linux 上运行 WinSCP。WinSCP 可以使用(未​​记录的)开关在命令行上更改密码/newpassword

winscp.com sftp://user:[email protected] /newpassword=newpassword

相关内容