【发布时间】:2018-08-21 15:25:02
【问题描述】:
我正在使用 Jsch(Jcraft) 库与 SSH 服务器建立 SSH 连接,如下所示:
JSch jsch = new JSch();
String user = "****";
String host = "****";
int port = 22;
String privateKey = "***.ppk";//Path to private key(The file is in .ppk format)
try
{
jsch.addIdentity(privateKey);
Session session = jsch.getSession(user, host, port);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
/*file transfer code*/
sftpChannel.disconnect();
session.disconnect();
}
catch (Exception e)
{
e.printStackTrace();
}
SSH 连接已成功建立,因为“StrictHostKeyChecking”已禁用。如果启用,我会收到以下错误:
com.jcraft.jsch.JSchException: UnknownHostKey: ******. RSA key f
is *************
at com.jcraft.jsch.Session.checkHost(Session.java:805)
at com.jcraft.jsch.Session.connect(Session.java:345)
at com.jcraft.jsch.Session.connect(Session.java:183)
我知道我们需要在代码中设置知道主机文件,如下所示:
jsch.setKnownHosts(knownHostsFileName);
我无法通过以下命令生成 known_hosts 文件:
ssh-keyscan <HOST> > known_hosts
它抛出以下错误:
'ssh-keyscan' is not recognized as an internal or external command,
operable program or batch file.
我只有 .ppk 格式的公钥和私钥。我没有 known_host 文件。
我们如何创建 known_host 文件?
为什么 ssh-keyscan 命令抛出错误 - 无法识别为内部/外部命令?
【问题讨论】:
-
您是指以编程方式还是以交互方式创建它?在大多数情况下,该文件应该基于人类用户对 SSH 主机的信任来创建。
-
不是以编程方式。如何以交互方式创建它?什么时候创建的?
-
“不工作” 不能作为问题描述工作。
-
我的道歉。我只是想传达一下,当我在 Windows 命令行中运行 ssh-keyscan 命令时,我得到错误 'ssh-keyscan' is not Recognized as an internal or external command, operable program或批处理文件。
-
我对重复问题的回答显示了如何为 Windows 获取
ssh-keyscan。在提出新问题之前,请仔细阅读答案。