我正在尝试设置一个新的服务器,只是一个带有 openssh 的基本服务器。首先,我尝试使用 Ubuntu 服务器进行常规安装,并在服务器安装的同时安装了 openssh。第一次我尝试使用标准配置文件进行连接,结果
ECDSA key fingerprint is SHA256:uWdXv1DYZ+MmnFOtYadTAPEZj93uculj8a4OZ5lnEOk.
Are you sure you want to continue connecting (yes/no)? yes
然后连接就正常了。然后我大约 1 小时后再次尝试连接,结果
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
SHA256:B12I+ERcLf+RMREsqxTpy8J5KyoqvsXLbijtz5TUMDw.
Please contact your system administrator.Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:5
我做了ssh-keygen -f "/home/user/.ssh/known_hosts"
然后又试了一次
The authenticity of host 'ip-adress' can't be established.
ECDSA key fingerprint is SHA256:B12I+ERcLf+RMREsqxTpy8J5KyoqvsXLbijtz5TUMDw.
Are you sure you want to continue connecting (yes/no)? yes
然后去
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug3: no such identity: /home/user/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/user/.ssh/id_ecdsa
debug3: no such identity: /home/user/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/user/.ssh/id_ed25519
debug3: no such identity: /home/user/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
user@server's password:
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
Permission denied, please try again.
然后又被拒绝了两次。
我读过 openssh 的手册页,用谷歌搜索,尝试过一些常规方法,比如编辑sshd_config
为只允许密码、主机身份验证、编辑密钥身份等,但都不起作用。所以我尝试重新安装 openssh,问题相同。尝试使用桌面版 ubuntu 设置新服务器,问题相同。第一次连接时有效,然后就崩溃了。尝试过 debian,问题相同。尝试过旧版本的 Ubuntu,问题相同。我实际上让 1 个服务器安装运行了几次,但 15 秒后,管道一直断开。但我没有收到权限被拒绝的消息。
我想知道,在第一个连接和其余连接之间,openssh 发生了什么?我该如何解决这个问题?似乎服务器正在将我拒之门外,它甚至不尝试让我连接。
答案1
当您第一次连接到服务器时,ssh 会要求您使用以下问题来验证服务器的指纹:
Are you sure you want to continue connecting (yes/no)? yes
当您回答是时,它将在 ~/.ssh 目录中创建一个名为:的文件,known_hosts
并将您的服务器身份放在那里以供下次使用。
无论何时,只要服务器中发生影响其身份的变化(例如:服务 IP 地址),您都会收到此消息,因为 ssh 客户端认为您没有连接到正确的服务器。(基于中的数据known_hosts
)。
known_hosts
您可以使用以下命令删除旧的身份数据:
ssh-keygen -R [IP ADDRESS - OR HOST NAME OF SERVER]
然后尝试再次连接。
如何验证服务器身份:
如果您可以直接访问服务器,例如如果它是虚拟机,则可以运行:
ssh-keyscan -t ecdsa localhost > ssh.ecdsa 2> /dev/null
ssh-keygen -lf ssh.ecdsa
它会给你类似这样的信息:
256 SHA256:0MY+7jktivMDvak0Clfkk49fkgjDbhWYrQBT//BsF5YDoV4 192.168.1.14 (ECDSA)
现在,当使用 ssh 时,您可以验证是否连接到正确的服务器。