我对 ssh 的实际工作方式感到非常困惑,并且我已经问了几个与此相关的问题,但我怀疑我陷入了 XY 问题陷阱。
所以,我想要的是这个。我希望能够通过 ssh 从客户端登录到几台服务器,对它们进行测试。应该这样完成:我将首先使用用户和密码登录,获取密钥文件,注销,然后使用密钥文件再次登录。我应该能够使用相同的密钥文件登录所有服务器。这样做至关重要,因为我不允许将密钥文件保存在客户端上。甚至不能作为临时文件保存,所以我必须以某种方式将其保存在内存中。但那是以后的问题(已经解决了)。
那么我应该如何设置呢?在哪里以及如何生成密钥?如何将它们分发到其他服务器?这些服务器运行的是 CentOS 7。我想我应该下载私钥而不是公钥。对吗?高安全性是一个问题。
答案1
在您的工作站上:
如果 ssh-agent 尚未运行,请启动工作站上的 ssh-agent。
检查 ssh-add -L
;错误消息Could not open a connection to your authentication agent.
意味着您需要启动代理:
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-yE5gDiNI3IqX/agent.13754; export SSH_AUTH_SOCK;
SSH_AGENT_PID=13755; export SSH_AGENT_PID;
echo Agent pid 13755;
并按照打印的说明设置您的环境:
$ SSH_AUTH_SOCK=/tmp/ssh-yE5gDiNI3IqX/agent.13754; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=13755; export SSH_AGENT_PID;
$ echo Agent pid 13755;
Agent pid 13755
SSH,启用代理转发,并使用您的密码登录到包含(希望受密码保护的)私钥的主机:
$ ssh -A host.example.com
[email protected]'s password:
在第一台服务器上
只有一次: 你需要生成新的密钥对; 看https://security.stackexchange.com/q/143442/77995
[[email protected] ~] $ ssh-keygen ***+options***
仅限一次(每个服务器和帐户):您需要从此服务器复制该新密钥对的公钥,并将其附加到~/.ssh/authorized_keys
您要访问的服务器上的文件中。您可以使用 ssh-copy-id 帮助程序为您完成此操作::
[[email protected] ~] $ ssh-copy-id localhost
对其他每台服务器以及所有想要使用该密钥登录的账户重复上述操作(如果这些服务器仍然支持基于密码的登录,否则您需要以另一种方式复制公钥):
[[email protected] ~] $ ssh-copy-id [email protected]
每次重新启动工作站时,ssh-agent 都会重新启动:将该身份添加到你的钥匙圈
[[email protected] ~] $ ssh-add .ssh/id_rsa # or wherever the private key is stored
Identity added: .ssh/id_rsa (rsa-key-xxx)
并注销:
[[email protected] ~] $ logout
然后:
当您下次从工作站登录时,ssh 将使用代理中存储的密钥进行基于密钥的身份验证,并且您将不会看到密码提示:
$ ssh host.example.com