我尝试在新服务器上使用公钥认证,但遇到了这个问题。
$ ssh -v -i .ssh/server 192.168.1.100
OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data .ssh/config
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.1.100 [192.168.1.100] port 22.
debug1: Connection established.
debug1: identity file .ssh/server type -1
debug1: identity file .ssh/server-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.8p1 Debian-1ubuntu3
debug1: match: OpenSSH_5.8p1 Debian-1ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '192.168.1.100' is known and matches the RSA host key.
debug1: Found key in .ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: .ssh/server
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password
然后我必须输入密码才能登录。
但是,如果我已经有一个会话连接到该服务器(通过密码连接),那么以下连接将使用密钥验证来避免输入密码。
如果尚未建立 SSH 连接,则必须输入密码才能连接。
这对我来说真的很奇怪,我检查了新服务器和另一台正常服务器的 MD5 /usr/sbin/sshd
,是一样的。然后我把/etc/ssh/sshd_config
从另一台正常服务器复制到新服务器,然后运行service ssh restart
。问题仍然存在。
我该如何修复这个问题?
答案1
检查.ssh
客户端计算机上的文件夹及其内部文件是否只有所有者 ( chmod -R 600 .ssh
) 可读,以及文件夹和文件的所有者是否正确(chown
如有必要,请使用命令)。
还要检查authorized_keys
服务器上的文件夹和文件(可能是/root/.ssh
尝试登录的用户的主文件夹)以确保它们的权限和所有者以相同的方式设置。
编辑:根据更多反馈(和一些猜测!) - 您能否检查/etc/ssh/sshd_config
以下参数是否按如下所示设置。如果没有,请尝试编辑它。
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
注意,这假设你没有以 root 身份远程登录
答案2
就我而言,主目录的权限是775
而不是0755
或更低。
authorized_keys 文件的完整路径,即/home/user/.ssh/
必须是0755
或更低。
答案3
我通过从 .ssh 中删除来解决了这个错误id_rsa.pub
。
我从另一台机器复制了id_rsa
它并将其分发到多个虚拟客户端。因此,id_rsa
和id_rsa.pub
实际上是不同的密钥,从而阻止了两者的使用id_rsa
。
但是没有错误消息清楚地表明这一点。我基本上是偶然发现的,试图让不同的机器进入相同的状态。
答案4
经过一番努力后我找到了问题的解决方案:
用户的主目录不应具有权限777
或所有人可写的权限。如果是这种情况,SSH 密钥验证将失败,您必须输入密码才能登录。