具有非默认身份文件位置的无密码 SSH

hii*_*ran 18 server ssh command-line password

作为启动脚本的一部分,我必须自动打开几个 gnome-terminal 窗口,其中一个终端会自动发送:

ssh user@192.168.1.3
Run Code Online (Sandbox Code Playgroud)

这样做的限制是我仍然需要输入密码才能完成 SSH 连接。

我想要做的是让我的脚本启动命令并完成连接。在这种情况下,我试图按照此处接受的答案中概述的说明进行操作。

从我希望连接的系统中,我运行:

ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key
Run Code Online (Sandbox Code Playgroud)

然后它提示我输入密码。我把它留空了,因为我不确定它的用途,所以我假设设置一个需要在每次使用时使用所述密码解锁它。

继续上面链接的说明,然后我运行并收到以下信息:

ssh-copy-id user@IP
ERROR: No identities found
Run Code Online (Sandbox Code Playgroud)

快速搜索显示我需要指定密钥的位置,因为它不在默认保存位置,所以我修复了:

ssh-copy-id -i /home/user/ssh/keys/server1key.pub user@192.168.1.3
Run Code Online (Sandbox Code Playgroud)

在询问服务器的密码后,它成功添加了密钥。但是,在尝试使用“ssh user@IP”登录时,仍然提示我输入密码。

据我所知,我正确地遵循了链接的说明,所以要么我遗漏了什么,要么现有的配置阻止我让它工作?

两个系统都使用 18.04 和 openssh。

ste*_*ver 35

它失败的原因ssh-copy-id与第一次失败的原因相同- 即因为您为身份文件选择了非默认位置。

您可以通过添加-i /home/user/ssh/keys/server1key到您的ssh命令以相同的方式解决它- 请注意,客户端需要私钥文件的位置。

man ssh

 -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
         ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.
Run Code Online (Sandbox Code Playgroud)

或者,您可能希望按照~/.ssh/config以下方式为主机创建一个文件条目

Host            somename
Hostname        192.168.1.3
User            user
IdentityFile    /home/user/ssh/keys/server1key
Run Code Online (Sandbox Code Playgroud)