我正在尝试采用更简化的方法来建立与远程服务器的 SSH 客户端连接。我创建了一个公钥/私钥对,并用于ssh-copy-id
将公钥安装到远程服务器上。
但是,它仍然要求输入密码,除非我使用类似ssh -i ~/.ssh/mykey user@host
.我是否必须输入此内容才能通过公钥身份验证绕过密码?
为了绕过这个问题,我使用了.bashrc
这个路径并创建了一个别名。然而,这是这样做的方法吗?或者这只是服务器允许公钥的问题,这样我就可以使用通常的密钥ssh user@host
?
答案1
如果您能够成功使用密钥对身份验证ssh -i ~/.ssh/mykey user@host
,则可以通过 SSH 客户端配置轻松地自动执行此操作。
例如,如果您将其添加到您的~/.ssh/config
文件中:
Host hostname
User username
IdentityFile ~/.ssh/mykey
IdentitiesOnly yes # see comment in answer below
然后,您可以简单地进行ssh hostname
操作,您的用户名和身份文件设置将由您的文件处理config
,然后您就可以参加比赛了,正如他们所说。
该IdentityFile
指令(覆盖-i
的开关ssh
)有一个默认设置,它将查找~/.ssh/id_dsa
、~/.ssh/id_ecdsa
、~/.ssh/id_ed25519
和~/.ssh/id_rsa
;私钥的任何其他文件名必须在config
文件中或-i
在命令行上指定。
如果添加IdentityFile
到 ssh 配置,您会发现客户端仍然发送默认密钥(请参阅ssh -vv
输出)。当使用 github 等具有多个帐户的网站时,这可能会出现问题。IdentitiesOnly yes
如果您希望 ssh 仅使用您指定的密钥,则需要包含该密钥。