ssh-add和ssh-agent有什么区别?

时间:2014-03-08 17:01:07

标签: ssh

我正在关注ssh github tutorial,我对ssh-add和ssh-agent之间的区别感到困惑。该教程似乎暗示每次我想使用我的ssh密钥时都需要输入密码,为了阻止它,我需要以某种方式将密钥提供给ssh代理。但是,在运行命令ssh-add之前,我没有提示输入密码,并且根据手册页

  

ssh-add将RSA或DSA身份添加到身份验证代理ssh-agent(1)。

如果代理的要点是不必使用密码,为什么代理要求我创建密码?

这是我正在运行的代码以及我对ssh-add的理解:

ssh-keygen -t rsa -C "your_email@example.com"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair. Public key is like a padlock, private key is like a padlock key. 
# Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]  
#This is like taking the padlock and they key together and sticking them in a box.
#-------------------------------
ssh-add id_rsa
#ssh-add is like sticking your key in a safe.  Instead of putting your keys on a hook in your house, where anyone can pick it up, you put your key in a safe protected by a password.
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
#The safe now has a password. 

ssh-add和ssh-agent之间有什么关系?我是否正确地承担以下事项:

  1. 在没有添加的情况下做一个SSH keygen有点像把你的钥匙留在你的公寓里,你进入公寓的任何人都可以把它拿起来,制作副本,并获得你所有的东西?

  2. 使用添加的SSH密钥进行操作就好像将密钥粘在一个带有组合的保险箱中,这样即使你让某人进入你的公寓,他们仍然无法获得你所有的密钥?

  3. ssh-add是一个名为ssh-agent的程序所采取的行动?

1 个答案:

答案 0 :(得分:11)

假设您要管理多台Linux计算机,并通过创建发布ssh-keygen -t rsa的公钥私钥对来设置ssh登录。假设您在创建密钥时没有设置密码。现在,您将通过发出ssh-copy-id -i ~/.ssh/id_rsa.pub user@somehost将公钥复制到要登录的所有计算机。现在,使用您的密钥,您将能够登录到复制密钥的所有计算机。

由于您没有创建密码,因此获取私钥的任何人都可以登录到添加了公钥的所有计算机。假设你让你的机器被你的一些朋友使用,其中一个人是邪恶的。要防止这种情况,请将密码设置为私钥。因此,每当您使用密钥登录时,系统都会提示您输入密码,因此只有您(知道密码)才能登录。

但是每当您登录其他计算机时输入密码短语变得很麻烦。因此,您可以将密码提供给ssh-agent一次,并在需要时使用它。您使用ssh-add将密钥提供给ssh-agent。您可以随时通过发出ssh-agent来检查ssh-add -l管理的所有密钥。