我有一台旧笔记本电脑,用来学习 Ubuntu Server 12.10。在重新格式化和安装 Ubuntu Server 之前,使用的是 Ubuntu Desktop。
使用 Ubuntu 桌面,我使用 no-ip.com 托管域通过 ssh 访问机器(没问题)。重新格式化后,我尝试使用相同的 no-ip.com 域访问同一台机器(家庭局域网上的相同静态 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 ECDSA key sent by the remote host is
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX: (Omitted).
Please contact your system administrator.
Add correct host key in /home/guest/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/guest/.ssh/known_hosts:2
remove with: ssh-keygen -f "/home/guest/.ssh/known_hosts" -R username.no-ip.org
ECDSA host key for username.no-ip.org has changed and you have requested strict checking.
Host key verification failed.
Run Code Online (Sandbox Code Playgroud)
不可否认,我不太了解错误消息。经过一些谷歌搜索后,我选择运行以下命令:
$ ssh-keygen -R {username.no-ip.org}
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:
ssh-keygen: /home/jerry/.ssh/known_hosts: No such file or directory
Run Code Online (Sandbox Code Playgroud)
错误消息中建议的“访客”也不存在:
jerry@mediaserver:/home$ tree -a
.
??? jerry
??? .bash_history
??? .bash_logout
??? .bashrc
??? .cache
? ??? motd.legal-displayed
??? .config
? ??? htop
? ??? htoprc
??? .profile
Run Code Online (Sandbox Code Playgroud)
这引出了以下问题:如果该文件甚至不存在,错误消息中指出的差异在哪里?也许我需要创建这个文件?
感谢任何愿意和我一起解决这个问题的人!
-杰瑞
我应该补充一点,我可以使用本地分配的 ip 地址在本地进行 ssh。
小智 5
警告表示主机 ID 已更改(从旧安装更改为新安装)。那挺好的!它有效,让你知道它已经改变了......
以非特权用户(不是 root)身份登录并创建隐藏目录 /home/jerry/.ssh:
cd; mkdir .ssh; chmod 0700 .ssh
此时,您可以将主机添加到 known_hosts 文件 (/home/jerry/.ssh/known_hosts)。
或者,如果您以访客身份连接,请以用户身份进行连接,访客而不是 jerry。
请注意,如果您希望为所有新用户创建 .ssh 目录,请将 .ssh 目录添加到 /etc/skel。/etc/skel 目录包含所有新用户都应该拥有的文件和目录。
sudo mkdir /etc/skel/.ssh; sudo chmod 0700 /etc/skel/.ssh
之后,您创建的每个新用户都将拥有一个带有正确权限 (0700) 的 .ssh 目录。