Answers:
对于每个用户:他们应该使用(在本地计算机上)生成密钥对ssh-keygen -t rsa
(rsa
可以使用dsa
或替换rsa1
,尽管不建议使用这些选项)。然后,他们需要将其公钥(id_rsa.pub
)的内容放入~/.ssh/authorized_keys
正在登录的服务器上。
我实际上更喜欢ssh-copy-id,它是默认情况下在* nix上找到的脚本(也可以很容易地放在Mac OS X上),它可以自动为您执行此操作。从手册页:
ssh-copy-id是一个使用ssh登录到远程计算机的脚本(大概使用登录密码,因此应该启用密码身份验证,除非您已经巧妙地使用了多个身份)
它还更改了远程用户的主目录,〜/ .ssh和〜/ .ssh / authorized_keys的权限,以删除组可写性(如果远程sshd在其配置中设置了StrictModes,则这将阻止您登录)。
如果指定了-i选项,则将使用身份文件(默认为〜/ .ssh / identity.pub),而不管ssh-agent中是否有任何密钥。
要点如下:
ssh-keygen
在您的机器上运行。这将为您生成公钥和私钥。~/.ssh/id_rsa.pub
)复制并粘贴到~/.ssh/authorized_keys
远程计算机上。重要的是要记住,这将为有权访问您计算机上的私钥的任何人提供对远程计算机的相同访问权,因此在生成密钥对时,您可以选择在此处输入密码以提高安全性。
供Windows用户设置腻子
总结其他人所说的话,设置SSH密钥既简单又无价。
在机器上,你将ssh方式连接的你需要生成密钥对:
claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius
只需在提示处按Enter,然后在出现提示时输入密码-理想情况下,该密码与当前主机和您将通过SSH登录的主机上的常规登录密码不同。
接下来,你需要复制你刚刚产生要SSH主机密钥对。大多数Linux发行版都有ssh-copy-id
执行此操作的工具:
claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
如果您的发行版没有该密钥,则应将密钥复制到目标主机,并将其添加到(可能存在的).ssh/authorized_keys
文件中:
claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub 100% 1119 1.1KB/s 00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May 9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys
最后,要从SSH密钥中获得最大收益,您将需要运行SSH代理。如果您使用桌面环境(Gnome,KDE等),则只需注销并重新登录即可为您启动SSH代理。如果没有,你可以添加以下到你的shell RC文件(.bashrc
,.profile
,等):
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi
这旨在作为清单。如果逐点进行操作,则应涵盖无密码登录的最常见陷阱。这些要点大多数在其他地方提到。这是一个汇总。
每台计算机上的帐户下必须有一个~/.ssh
目录chmod 700
,该目录将发起或接收连接。
(专用)密钥必须在没有密码短语的情况下生成,否则可以启动一个代理,该代理将保存解密版本的带有密码短语的密钥供客户端使用。使用启动代理ssh-agent $SHELL
。这是$SHELL
我花了一段时间才找到的部分。如果要使用代理,请参见手册页,因为其中包含许多详细信息。
不要忘记默认情况下,最新版本的sshd不接受弱(<2048位DSA)键。
以下必须在客户端机器上完成,以发起的连接。
你的私钥必须被放置在~/.ssh/id_rsa
或~/.ssh/id_dsa
适当。您可以使用其他名称,但是必须在原始计算机上ssh命令的-i选项中包含该名称,以显式指示私钥。
您的私钥必须为chmod 600
。
检查主文件夹是否为chmod 700
。
现在用于允许机器接收请求。常见的模式是管理员允许您访问您不拥有的计算机(例如共享虚拟主机)。因此,使用ssh的想法是,您将公共密钥提供给向您提供帐户的任何人。这就是为什么您通常不将私钥放在接收请求的计算机上的原因。但是,如果您还希望此计算机也执行传出ssh,则必须按照上述步骤将其视为原始计算机。
~/.ssh/authorized_keys
将接收连接的帐户下名为的文件中。您也可以在此处放置其他允许通过此帐户连接的密钥。如果您正在使用vi并将密钥从PuTTY中的粘贴缓冲区粘贴到文件中,这将是一件特别棘手的事情:密钥以“ ssh-”开头。如果您未处于插入模式,则第一个“ s”会将vi置于插入模式,其余键看起来也很好。但是,您会在密钥的开头丢失一个“ s”。我花了好几天才找到它。chmod 600 ~/.ssh/authorized_keys
。它必须至少是gw。这里有很好的建议,因此我不再重复。一旦设置了一台服务器以允许您使用密钥登录,就可以设置其他服务器以使用此一台服务器进行相同的操作:
remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done
只需cd到您的主目录,将变量remote定义为一个或多个服务器名称,然后一次执行一堆即可。它要求的密码将是您的远程服务器的ssh密码。您当然可以使用不带for循环的简化版本:
tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"
记住:仅复制您的公共密钥。您不希望您的私钥坐在某个服务器上,任何具有sudo的人都可以复制它们并强行使用您的密码。