我想在连接到 java 中的远程主机后读取 SSH key 签名对横幅(用于生成 SSH 密码)。我正在使用 JSch 客户端库进行 SSH 连接。
在主机上进行某些操作后,SSH 密码会发生变化,因此每次我都需要从 key 签名对生成新的 SSH 密码才能登录。
有没有一种方法可以让我以编程方式读取横幅?
下面是尝试通过客户端控制台 (PuTTY) 进行 SSH 时出现的 key 签名对横幅的片段,并显示密码提示。
NbwDZIAGjGS90zisB+jY9Kqrmu67PyMwas6S6jY68f+QL4l+TJDyHWUTGtzluflwY+z/bHn0mXtdIkgxsoiVm5nCnNi0viMUKq/dPygXEZ0uDma9Co0WHI25UNLn525pNSuT1At5wTEEinH7xKiypIKDNVxxeprshtsd4rcirTUQveTBEbAgABJtzHrSNHmqs2Rui4NbWRqFDabft4uID6qwtl5wxAoNhh0Z9FT1r3kCK0FoLxcp9nlyQ6kD2rmp1sQG1SvQky2ATa9sD+ZBBAhlvwbOns5fWRE8A+ElQtkvyB8IxCS59cWa8T5rXm7G57x9uExEn57Vn3ZBuKP9Tg== bS6VdF5I167P03QMkM88k2cwS9KtyEfgT6Ff2e0iIvxdBMSKq453953J//vuriZk+mKjiEX0/RzrQSVIAzOYXFTtsZrIh7ER2IS0LoaXQ5izk4aobVq3BtiU+EknM3Qcy7IpVbwmQ7ZmCmjtOL+Ux/n8vEDLYdk8dVeFJpzp4s53MrRkm4RC9yHgROW6HJxYscmQa+xah5ymRJyC2mt4aFfeQjAUZIEBhncLQge6nGEMybXmail1bgqhinE5xem+K6M2Ad3+0ahhW7NflWC4LjweTSHfsItfDwsb8i280LuYuw6w07LTadkn40AfpnVXOiFM+eUpUeIkw16RzduCew==
最佳答案
该消息(您将其称为“SSH key 签名对横幅”)可以作为 SSH 身份验证横幅或 SSH 键盘交互式身份验证提示出现。它不能是密码身份验证提示,因为 SSH 服务器无法自定义该提示。
在这两种情况下,要捕获消息,请实现 UserInfo
interface 。并使用 Session.setUserInfo
method 将其与 Session
实例关联起来。 .
要捕获身份验证横幅,请实现
UserInfo.showMessage
method 。请注意,JSch 也为其他(内部)消息调用该方法,而不仅仅是横幅。因此,您必须检查是否收到了所需的消息。要捕获键盘交互提示,您的
UserInfo
实现还必须实现UIKeyboardInteractive
interface及其UIKeyboardInteractive.promptKeyboardInteractive
method 。该消息可以包含在name
、instruction
或prompt
参数中。你必须自己找出答案。
要快速测试服务器如何发送消息,请尝试使用 WinSCP SFTP client 连接并检查它如何显示消息。
作为 banner :
或作为 keyboard interactive prompt ?
标题中的“服务器提示符”就是您在
名称
中得到的内容。指令
将呈现在“使用键盘交互式身份验证”下方(此提示中没有“指令”)。 “挑战是...”是提示[0]
(在这种情况下只有一个“提示”,但可以有更多)。
关于java - 在 Java 连接到主机后如何读取 SSH key 签名对横幅(用于生成 SSH 密码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058471/