![在 Mac OS X 10.10.5 (Yosemite) 上设置 SSH 登录私钥时出现问题,无需密码](https://linux22.com/image/1465171/%E5%9C%A8%20Mac%20OS%20X%2010.10.5%20(Yosemite)%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%20SSH%20%E7%99%BB%E5%BD%95%E7%A7%81%E9%92%A5%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%EF%BC%8C%E6%97%A0%E9%9C%80%E5%AF%86%E7%A0%81.png)
我正在尝试使用 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 an
authorized_keys file already you will be creating one with that
nano 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 所说,这是一个您应该注意的安全问题。
编辑
关于设置正确的访问权限...在另一个线程是不同文件的列表。