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.
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 的想法是,您将您的公钥提供给给您帐户的任何人。这就是为什么您通常不会将私钥放在接收请求的机器上。但是,如果您希望这台机器也能进行传出 ssh,那么您必须按照上述步骤将 is 视为原始机器。
您的公钥必须放在将接收连接~/.ssh/authorized_keys的帐户下调用的文件中。您也可以在此处放置允许通过此帐户连接的其他密钥。如果您在 vi 中并将密钥从 PuTTY 中的粘贴缓冲区粘贴到文件中,那么特别棘手的事情是:密钥以“ssh-”开头。如果您未处于插入模式,则第一个“s”会将 vi 置于插入模式,其余的键看起来就好了。但是您会在键的开头缺少一个“s”。我花了好几天才找到它。
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 循环的简化版本:
对于每个用户:他们应该生成(在他们的本地机器上)他们的密钥对使用
ssh-keygen -t rsa
(rsa
可以用dsa
or替换rsa1
,尽管不推荐这些选项)。然后他们需要将他们的公钥 (id_rsa.pub
) 的内容放入~/.ssh/authorized_keys
正在登录的服务器上。我实际上更喜欢ssh-copy-id,这是一个默认在 *nix 上找到的脚本(也可以很容易地放在Mac OS X上),它会自动为您执行此操作。从手册页:
哼,不明白。只需创建一个密钥并开始使用。:) HOWTO 另外你可以禁止通过密码登录。在例如 /etc/ssh/sshd_config 中:
这是相当直接的做法——这里有一个简单的演练。
要点是:
ssh-keygen
在你的机器上运行。这将为您生成公钥和私钥。~/.ssh/id_rsa.pub
)复制并粘贴到~/.ssh/authorized_keys
远程计算机上。重要的是要记住,这将使有权访问您机器上的私钥的任何人都可以访问远程机器,因此在生成密钥对时,您可以选择在此处输入密码以提高安全性。
供 Windows 用户设置 putty
总结其他人所说的话,设置 SSH 密钥既简单又无价。
在您将要通过 SSH 连接的机器上,您需要生成您的密钥对:
只需在注明的地方按 Enter 并在出现提示时输入密码 - 理想情况下,这与您在当前主机和您将通过 SSH 连接的主机上的常规登录密码不同。
接下来,您需要将刚刚生成的密钥复制到要通过 SSH 连接到的主机上。大多数 Linux 发行版都有
ssh-copy-id
执行此操作的工具:如果您的发行版没有,那么您应该将密钥复制到目标主机并将其添加到(可能存在的)
.ssh/authorized_keys
文件中:最后,为了最大限度地利用 SSH 密钥,您需要运行 SSH 代理。如果您使用桌面环境(Gnome、KDE 等),那么只需注销并重新登录即可为您启动一个 SSH 代理。如果没有,您可以将以下内容添加到您的 shell RC 文件(
.bashrc
、.profile
等):这是一个清单。如果有人逐点遵循它,那么应该涵盖无密码登录的最常见问题。这些要点中的大部分都在其他地方提到过;这是一个聚合。
每台计算机上必须有一个
~/.ssh
目录,该目录chmod 700
位于将发起或接收连接的帐户下。(私有)密钥必须在没有密码的情况下生成,或者可以启动一个代理,该代理将持有一个带有密码的密钥的解密版本供客户端使用。用 启动代理
ssh-agent $SHELL
。这是$SHELL
我花了一段时间才找到的部分。如果您想使用代理,请参阅手册页,因为有很多详细信息。不要忘记,最新版本的 sshd 默认不接受弱(<2048 位 DSA)密钥。
必须在客户端计算机上完成以下操作才能发起连接。
您的私钥必须放置在适当的位置
~/.ssh/id_rsa
。~/.ssh/id_dsa
您可以使用其他名称,但它必须包含在原始计算机上 ssh 命令的 -i 选项中,以明确指示私钥。您的私钥必须是
chmod 600
.检查您的主文件夹是否为
chmod 700
.现在允许机器接收请求。一个常见的模型是管理员允许您访问您不拥有的机器(如共享网络托管)。因此,使用 ssh 的想法是,您将您的公钥提供给给您帐户的任何人。这就是为什么您通常不会将私钥放在接收请求的机器上。但是,如果您希望这台机器也能进行传出 ssh,那么您必须按照上述步骤将 is 视为原始机器。
~/.ssh/authorized_keys
的帐户下调用的文件中。您也可以在此处放置允许通过此帐户连接的其他密钥。如果您在 vi 中并将密钥从 PuTTY 中的粘贴缓冲区粘贴到文件中,那么特别棘手的事情是:密钥以“ssh-”开头。如果您未处于插入模式,则第一个“s”会将 vi 置于插入模式,其余的键看起来就好了。但是您会在键的开头缺少一个“s”。我花了好几天才找到它。chmod 600 ~/.ssh/authorized_keys
。它必须至少是 gw。正如其他人所说,您的用户应该在他们的客户端机器上使用 ssh-keygen 为自己制作密钥对,并将他们的公钥添加到他们想要登录的机器上的 ~/.ssh/authorized_keys 中。
不过,对于更详细的信息,我强烈推荐SSH,The Secure Shell。
这里有很好的建议,所以我不会重复。一旦您设置了一台服务器以允许您使用密钥登录,您就可以设置其他服务器以使用此衬垫执行相同的操作:
只需 cd 到您的主目录,将变量 remote 定义为一个或多个服务器名称,然后一次执行一堆。它要求的密码将是您远程服务器的 ssh 密码。您当然可以使用没有 for 循环的简化版本:
记住:只复制你的公钥。您不希望您的私钥存放在任何使用 sudo 的人都可以复制它们并暴力破解您的密码的服务器上。