我无法在 Mac OS X 10.9.5 Mavericks 机器上进行无密码登录。authorized_keys
正确设置文件后,我可以登录远程 Ubuntu 机器。但是,我无法进行反向操作。
因此,我尝试通过确定是否可以在不使用密码的情况下执行此操作来排除 Mac 设置故障:
ssh localhost
在我的 Ubuntu 机器上这样做很有效,但 Mac 一直要求输入密码。是的,我检查了文件authorized_keys
以及文件known_hosts
,并确保我的 Mac 的密钥都存在于这两个文件中。但我无法在没有密码的情况下id_rsa.pub
通过 SSH 连接。localhost
我读了其他帖子比如这个。
甚至在文件中启用了以下两个设置(通过删除它们前面的主题标签)sshd_config
:
RSAAuthentication yes
PubKeyAuthentication yes
仍要求输入密码。
authorized_key
将和文件的副本放在known_hosts
etc 目录中。
仍要求输入密码。
答案1
我提供了一个Stack Overflow 上的答案解释了需要的分步过程通过 SSH 设置无密码访问。以下是针对您的特定需求而定制的说明。
首先,使用-v
如下标志将 SSH 连接设置为详细模式:
ssh -v localhost
如手册页中所述ssh
;可通过以下方式访问man ssh
:
-v Verbose mode. Causes ssh to print debugging messages about its
progress. This is helpful in debugging connection, authentica-
tion, and configuration problems. Multiple -v options increase
the verbosity. The maximum is 3.
通过向我展示登录过程的确切流程以及到底是什么阻塞了它,这在过去为我省去了很多麻烦。例如,这是我在本地 Mac OS X 10.9.5 机器上运行该命令的输出:
ssh -v localhost
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 53: Applying options for *
debug1: Connecting to localhost [::1] port 22.
debug1: Connection established.
debug1: identity file /Users/Giacomo1968/.ssh/id_rsa type 1
debug1: identity file /Users/Giacomo1968/.ssh/id_rsa-cert type -1
debug1: identity file /Users/Giacomo1968/.ssh/id_dsa type -1
debug1: identity file /Users/Giacomo1968/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2
debug1: match: OpenSSH_6.2 pat OpenSSH*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr [email protected] none
debug1: kex: client->server aes128-ctr [email protected] 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: Server host key: RSA 01:aa:8e:8e:b9:e1:4b:e8:bd:c5:a2:20:a3:c7:f1:18
debug1: Host 'localhost' is known and matches the RSA host key.
debug1: Found key in /Users/Giacomo1968/.ssh/known_hosts:43
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,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/Giacomo1968/.ssh/id_rsa
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Trying private key: /Users/Giacomo1968/.ssh/id_dsa
debug1: Next authentication method: keyboard-interactive
Password:
如您所见,它弹出密码提示。但在此之前,它显然在检查我的 RSA 公钥。由于我没有公钥,它只是转到下一个身份验证方法。在ssh -v
设备上运行时,请注意输出,以查看哪里出现问题。
还要确保目标计算机上的 SSH 文件具有与以下内容匹配的权限并且由尝试访问的帐户拥有,如下例所示:
-rw------- [username] [usergroup] authorized_keys
-rw------- [username] [usergroup] id_rsa
-rw-r--r-- [username] [usergroup] id_rsa.pub
-rw-r--r-- [username] [usergroup] known_hosts
chmod
因此对文件运行此命令authorized_keys
:
sudo chmod 600 ~/.ssh/authorized_keys
并对文件运行此chmod
命令id_rsa
:
sudo chmod 600 ~/.ssh/id_rsa
答案2
我找到了问题所在。远程主机记录了每个 RSA 或 DSA 密钥的来源。这以纯文本形式显示在授权密钥列表的每一行末尾(由于nano
不进行文本换行,因此通常看不到)。
我首先通过 ssh 连接到远程主机,然后复制密钥并将其与 合并authorized_keys
。不好。
从客户端计算机,必须使用特殊的复制命令将密钥复制到远程主机,scp
或(除非安装了或,ssh-copy-id
否则 OS X 没有这个命令)。brew
port
然后就可以进行合并authorized_keys
了。这是我粗心大意造成的错误。
答案3
对我来说,我有一个用于连接主机的辅助密钥。为了使用该密钥进行连接,您需要使用以下命令将其添加到身份中:
ssh-add yourPrivateKey
答案4
我当时已经束手无策了……我误以为ssh-copy-id
这是一个仅适用于 Linux 的实用程序。最后,我放下自尊,在 macOS 终端中输入命令,它就成功了!
ssh-copy-id me@sshd-server
我不知道魔法ssh-copy-id
有什么用,但它就是有效。我能够使用简单的命令成功无需密码登录:
ssh me@sshd-server
我对 一点运气都没有cat id_rsa.pub >> ~/.ssh/authorized_hosts
。每次我尝试 ssh 到服务器时,它都只是不断要求我输入密码。这是正确的 600 权限authorized_hosts
和 700 权限~/.ssh
。