在 Mac OS X 10.10.5 (Yosemite) 上设置 SSH 登录私钥时出现问题,无需密码

在 Mac OS X 10.10.5 (Yosemite) 上设置 SSH 登录私钥时出现问题,无需密码

我正在尝试使用 SSH 客户端登录远程服务器。此服务器上有我的公钥,还有我未使用密码创建的私钥。

在 Windows 上,我可以通过 PuTTY 登录,没有任何问题。

在 Mac OS X 上,当我使用 SSH 客户端时,会弹出要求输入密码的窗口,无论我输入什么,SSH 都会要求我输入密码。这里也不管我输入什么,它总是显示权限被拒绝。

我发现当私钥是 PPK 格式时可能会发生类似的问题(我的情况就是如此),所以我尝试将其转换为 PEM,但没有帮助:

puttygen id.ppk -O private-openssh -o id.pem

附加信息:

我的 SSH 配置包含我尝试连接的主机的私钥路径。我还尝试使用 ssh 参数-我手动指定密钥,但结果相同。

用于创建 PEM 格式的命令是“puttygen id.ppk -O private-openssh -o id.pem”

日志输出(仅相关部分)

debug1: Authentications that can continue: publickey,password 
debug1: Trying private key: /Users/josef/.ssh/talnet_rsa 
debug1: read PEM private key done: type RSA 
debug3: sign_and_send_pubkey: RSA #I removed these for security reasons#
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
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

答案1

如果您使用它生成密钥,ssh-keygen它将提示您输入密码。私钥将使用此密码加密。如果您想使用私钥(例如用于授权),您必须先解密它。弹出的窗口要求您输入您在 中输入的密码ssh-keygen

可以生成一个没有密码的密钥,但任何获得该密钥的人都可以无限制地使用它。不建议这样做,如果您没有设置密码,Mac 不会提示您输入密码。

我可能错了,如果是这样,请输入一个空白密码;我的意思是“这里什么都没有”的密码。

答案2

我正在尝试使用 SSH 客户端登录远程服务器。此服务器上有我的公钥,还有我未使用密码创建的私钥。

这是无密码设置的良好开端。在 Windows 上,您显然已正确添加了公钥。这就是您需要执行的操作,以便将公钥添加到用户的 Mac OS X文件中。如果您的远程服务器上已有公钥文件 (),authorized_keys则应执行以下步骤。~/.ssh/id_rsa.pub

前言。

根据您的评论和最近的编辑,您似乎有一个.pem文件(id.pem),它只是一种容器格式,包含证书中的公钥和私钥。不确定 Mac OS X 将如何.pem直接使用,但对于我创建无密码设置的首选方法,我建议您在继续操作之前提取公钥。在 Mac OS X 系统上从终端执行类似以下操作非常简单:

openssl rsa -in id.pem -pubout > ~/id_rsa.pub

当然,更改名称/路径id.pem以匹配该文件在系统上所在的路径。该~/id_rsa.pub路径告诉命令提取id_rsa.pub到您的主目录。

对于那些看到我上面所做的和下面所做的事情的人来说,是的,该命令可能类似于将公钥直接转储到authorized_keys

openssl rsa -in id.pem -pubout >> ~/.ssh/authorized_keys

但这个答案是关于追踪细节,了解过程并查看事情在哪里“中断”。因此,~/.ssh/authorized_keys直接将公钥干净地转储到其中会更快,但对于学习目的而言并不一定更好。

简短的回答。

简而言之,我认为如果id_rsa.pub将添加到了authorized_keys,那么这是一个权限问题,只需由您的用户在 Mac OS X 系统上运行以下命令即可解决:

chmod 600 ~/.ssh/authorized_keys

如果这不起作用,请阅读下面的详细信息,看看是否错过了某个步骤。

较长的答案。

首先,将 的内容复制~/.ssh/id_rsa.pub到 中authorized_keys

nano ~/.ssh/authorized_keys

at the bottom of只需将 ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys . If you do not have anauthorized_keys file already you will be creating one with thatnano 600`的内容command so you should set proper permissions on the file—(又名所有者/用户读写)放置为只读,这样 SSH 就不会像这样阻塞它:

chmod 600 ~/.ssh/authorized_keys

现在完成了这些,你就大功告成了。最后一步,你只需在机器内登录到你的机器,你就会看到一个“已知主机”警告,如下所示:

The authenticity of host 'my_host(123.456.78.90)' can't be established.
ECDSA key fingerprint is ab:12:cd:34:ef:56:gh:78:ij:90:kl:12:mn:34:op:56.
Are you sure you want to continue connecting (yes/no)? yes

只需回答yes,然后你就会收到如下消息:

Warning: Permanently added 'my_host,123.456.78.90' (ECDSA) to the list of known hosts.

现在您应该已经全部设置好了。以后您通过 SSH 登录该机器将完全无需密码。

如果您想调试连接,请务必使用-v如下(详细)选项:

ssh -v myuser@my_host

如果一切顺利,您将获得详细但干净的输出,如下所示:

OpenSSH_5.9p1 Debian-5ubuntu1.4, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to my_host [123.456.78.90] port 22.
debug1: Connection established.
debug1: identity file /home/myuser/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /home/myuser/.ssh/id_dsa type -1
debug1: identity file /home/myuser/.ssh/id_dsa-cert type -1
debug1: identity file /home/myuser/.ssh/id_ecdsa type -1
debug1: identity file /home/myuser/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.4
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.4
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: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA ab:12:cd:34:ef:56:gh:78:ij:90:kl:12:mn:34:op:56
debug1: Host 'my_host' is known and matches the ECDSA host key.
debug1: Found key in /home/myuser/.ssh/known_hosts:3
debug1: ssh_ecdsa_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: Offering RSA public key: /home/myuser/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to my_host  ([123.456.78.90]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-34-generic x86_64)

如果这不起作用,只需查看调试输出并查看哪里出现了调试障碍。

答案3

如果您成功将 PPK 密钥转换为 openSSH 密钥,那么使用puttygen.exe它就可以工作了。

我认为这里配置错误。尝试chmod 700 <private keyfile>在 Mac OS X 系统上进行操作。

可能还需要检查chown。您的用户应该持有密钥的正确 UID。

另外@Jakuje 在评论中说,用来ssh -vvv ...解决连接问题。

正如@Schwertspitze 所说,这是一个您应该注意的安全问题。

编辑

关于设置正确的访问权限...在另一个线程是不同文件的列表。

相关内容