SSH 连接的 known_host

SSH 连接的 known_host

我用 Java 编写了一个应用程序。该应用程序在两台 PC(一台 Windows 和一台 Linux)之间建立连接。我的应用程序必须建立连接并执行一些命令。在命令中,我想传输一个文件。

此连接是采用 SCP 协议的 SSH 连接。

我成功与 JSCH 建立了连接,我找到了传输文件的命令,但此时我遇到了一个问题。

我传输文件的命令是:

scp -r -p path1 ***@***.***.***.***:path2;

但是当我启动该程序时,出现以下消息:

Host '***.***.***.***' is not in the trusted hosts file.
(fingerprint md5 CLE)
Do you want to continue connecting? (y/n)

但是,此消息在我的控制台中,在我的 Java 应用程序中,因此我不会发送 y 或 n。我对 known_host 进行了更多搜索,但没有找到任何结果。

我尝试这个:

jsch.setKnownHosts(System.getProperty("user.home") + "/.ssh/known_hosts");
session.setConfig("StrictHostKeyChecking", "no");

或者这个(在我的文件 hosts 中):

ssh -o StrictHostKeyChecking=no [email protected]

或这个 :

Host 192.168.0.*
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

但什么都不起作用,我不明白逻辑。我们应该修改哪个主机文件?我要连接到哪台电脑,或者哪台电脑正在连接?

如果您想了解我的程序的更多细节,请告诉我。

谢谢 !

答案1

如果你仍然感兴趣的话。

StrictHostKeyChecking 是一种用于对抗中间人攻击的安全措施。当您通过 SSH 连接到新服务器时,它会通知用户这是一台新计算机,我以前从未连接过它,因此我不信任它,所以您想做什么。这就是这条消息的基本含义。

Host '***.***.***.***' is not in the trusted hosts file.
(fingerprint md5 CLE)
Do you want to continue connecting? (y/n)

如果你回答是,它会将该服务器的公钥添加到$HOME/.ssh/known_hosts运行的机器的ssh user@ip。像这样:

192.168.1.136 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJj/87wetLDd27TX+JEIPxWZbu4DJXjYYM9IQZoCKBCi8H66cXgrT4M0Vf9x8OE7R8Vnz5JkVnnAoic311mQB44=

如果发生中间人攻击,你会看到类似以下内容:

user@hostname ~]$ ssh user@ip
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/hostname/.ssh/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

如果您在与以前连接的同一 IP 上重新配置服务器,则此消息很常见,为此您需要删除第 4 行,并再次执行信任过程。

PuTTY请求密码

使用 SSH,您可以使用私钥公钥身份验证或密码。大多数系统管理员都会删除密码功能,因为这会让黑客有机会使用暴力破解或彩虹表等手段获取访问权限。

要摆脱密码,您需要在服务器的$HOME/.ssh/authorized_keys文件中添加您的机器(运行 java 的机器)的公钥。

此命令将打印当前使用的私钥的公钥:ssh-add -L。或者你可以在你的机器中找到它$HOME/.ssh/id_*.pub*根据密钥的类型,可能会出现一些单词,很可能安全验证。由于您使用的是 Putty,因此您需要采取第二种方法。如果您没有 SSH 密钥,Putty 也可以为您创建一个。

现在,您下次尝试登录时将不会询问您的密码。

答案2

它是 ~/.ssh/known_hosts 文件。您是否已验证该文件是否使用正确的密钥进行了更新?作为测试,您可以尝试从命令行进行 ssh,然后接受公钥。这样,主机将被添加到您的 ~/.ssh/known_hosts 中,然后您就不会再收到错误。通常,这StrictHostKeyChecking no不是一个安全方面的好做法。

相关内容