Toc
0 results found
如何设置 SSH 使用公钥认证登录主机

总览

在 Linux 或 OS X 上设置 SSH 使用公钥

在 Windows 上使用 PuTTY 设置 SSH 使用公钥

### 总览

在使用 SSH 时,利用公钥来进行认证后的链接,是比只利用密码来进行验证要安全得多的。SSH 公钥认证是基于非对称加密算法的,这种加密算法会生成一对 key,一个“私有”key,也就是私钥,和一个“公有”key,即公钥。你在你的电脑上只保存一个私钥,用来进行远程连接。同时你也可以把公钥分享给任何人(不要给他私钥哟),或者存储在远程主机的某个目录上,比如 .ssh/autorized_keys

使用 SSH 公钥认证:

远程主机必须要安装了 SSH(任意版本)。本文假设远程主机使用了 OpenSSH(对,就是上一篇文说的印第安那大学的 UTIS 中心系统使用的那个)。如果远程主机正在使用一个奇怪的 SSH 版本(比如 Tectia SSH),下文即将使用的方法可能不正确。

你的电脑也必须安装某种版本的 SSH 工具。本文假设你在 Linux 或 Mac OS X 下使用命令行中的 SSH,在 Windows 下使用 PuTTY。

还有个前提是你能够把公钥想办法传输到远程主机上。使用用户名密码登录到远程主机或者有网络管理员来帮你做这件事。

公钥可以存储到 ~/.ssh/authorized_keys目录下。

Back to top

### 在 Linux 或 OS X 上设置 SSH 使用公钥

  1. 使用命令行的 SSH 创建一对 Key,加密算法可以是 DSA 或者 RSA:
  • 创建 DSA Key,在命令行中输入:
ssh-keygen -t dsa
  • 创建 RSA Key,在命令行中输入:
ssh-keygen -t rsa
  1. 接下来 ssh-keygen 会提醒你提供一个文件名来储存 key 文件,同时提供一个密码来保护你的私钥。

    • 文件名:如果你要使用默认的文件名(和路径)的话,直接回车就好了。如果你想指定文件名(和路径)的话,就输入路径并回车。
      但是很多远程主机设置为只接受使用默认路径和默认文件名的私钥,在这种情况下,如果要使用其他文件名的私钥,就要做一点点设置了,下文会有介绍。

    • 密码:输入不少于 5 个字符的密码,然后回车。如果不想使用密码,则可以直接回车。
      UITS 强烈建议使用密码来保护你的私钥。如果不使用密码的话,任何能访问你电脑的人都可以使用这个私钥来进行远程主机的登录。

    你的私钥按照你的输入保存在相应的位置(~/.ssh/id_rsa或者 ~/.ssh/my_ssh_key)。
    而相对应的公钥也会保存在与私钥相同的位置,并且会在私钥的文件名后面加一个.pub 的后缀(~/.ssh/id_rsa.pub或者 ~/.ssh/my_ssh_key.pub)。

  2. 使用 SFTP 或者 SCP 将公钥拷贝到远程主机上。例如:

    scp ~/.ssh/id_rsa.pub serious@cy198706.com:  // 不要忘记后面这个"`:`"

    接着输入你在该远程主机上的用户密码,认证通过之后,公钥就会被拷贝到远程主机你的 home 目录下。

  3. 使用用户名密码登录远程主机。
    如果你没有权限登录远程主机,那么你需要联系网络管理员来帮你创建 ~/.ssh/authorized_keys 文件。

  4. 如果你的远程主机中没有 ~/.ssh/authorized_keys 文件,则需要手动创建一个:

     mkdir -p ~/.ssh
    touch ~/.ssh/authorized_keys

    如果已有这个文件,则上面的命令并没有什么卵用

  5. 将步骤 3 中拷贝过来的公钥文件(~/id_rsa.pub)的内容写入 ~/.ssh/authorized_keys文件中。

    cat ~/id_rsa.pub > ~/.ssh/authorized_keys

    然后检查一下是否写入成功:

    cat ~/.ssh/authorized_keys | more
  6. 现在可以安全地删除公钥文件了:

    rm ~/id_rsa.pub
  7. 你可以在其他的主机上也添加这个公钥,只需要重复 3-7 步骤就可以啦。

  8. 现在你应该可以使用 SSH 登录到远程主机了。登录的主机是cy198706.com,登录时的用户名是 serious,登录所用的电脑就是存有你刚才创建的私钥的这台电脑。

    如果你刚才创建私钥时使用密码保护了,那么远程主机会要求你在 SSH 时输入密码(该密码并不会被传输到远程主机,只做本地验证):

       [serious@desktop ~]$ ssh serious@cy198706.com
    Enter passphrase for key '~/.ssh/id_dsa':
    Last login: Fri Jul 24 09:23:17 2015 from serious.somewhere.org

    如果你刚才在创建私钥时没有使用默认的文件名(或路径),则你需要用以下两种方法来进行 SSH:

    • 在命令行中加入 -i 参数,并指定私钥的路径。例如你刚才把私钥存在了~/.ssh/mykeys/my_host,并要使用这个私钥来进行 SSH 的话:
    ssh -i ~/.ssh/mykeys/myhost serious@cy198706.com
    • 修改配置文件。
      SSH 会依次从以下几处读取配置信息:
      1. 命令行参数
      2. ~/.ssh/config(也许不存在)
      3. /etc/ssh/ssh_config 两个文件中读取配置信息

    SSH 配置文件是一个包含关键词和参数的文本文件。要指定连接某台远程主机时要使用哪个私钥,只需要使用文件编辑器添加一条记录即可。

    例如,要连接到 cy198706.com,同时使用~/.ssh/mykeys/cy_host 这个私钥,则需要在 ~/.ssh/config(如果没有自行创建)文件中添加如下两行:

    Host cy198706.com
    IdentityFile ~/.ssh/mykeys/cy_host

    保存文件之后,SSH 就会利用这个规则来访问指定的主机。

    你也可以添加多条规则:

    	Host host1.cy198706.com
    IdentityFile ~/.ssh/mykeys/cy_host1

    Host host2.cy198706.com
    IdentityFile ~/.ssh/mykeys/cy_host2

    Host host3.cy198706.com
    IdentityFile ~/.ssh/mykeys/cy_host3

    甚至可以使用通配符 * 来指定规则:

    Host *.cy198706.com
    IdentityFile ~/.ssh/mykeys/cy_host

    要想得知更多关于 SSH 配置文件的用法,查看 帮助页面,或者man ssh_config

Back to top

### 在 Windows 上使用 PuTTY 设置 SSH 使用公钥

PuTTY 命令行客户端,还有用来生成 key 的 PuTTYgen 工具,以及 Pageant SSH 认证代理工具,还有 PuTTY SCP,Putty SFTP 工具都是打包在一起下载的。打包版可以在 这儿 下载到。安装版可以在 这儿 下载到。

墙内的同学你们有福了,该网站已被墙得体无完肤,我上传到了 度娘网盘 提供下载。

下载完成后都有这些文件:

PuTTY
  1. 打开 PuTTYgen,如图所示
PuTTY
  1. 在下方的 Parameters 区域,可以选择 SSH-2 RSA 或者 SSH-2 DSA 加密方式。Number of bits in a generated key参数使用默认值就可以。

  2. 点击Generate,上方会出现一个进度条,并且提示你在空白区域移动鼠标(别移出去了!눈_눈),它就会随机生成一对 key。然后公钥就会显示在上方的框里。如图所示。

PuTTY
  1. Key passphraseConfirm passphrase输入框中,输入一个密码来保护你的私钥。当然你也可以不输入。
    UITS 强烈建议使用密码来保护你的私钥。如果不使用密码的话,任何能访问你电脑的人都可以使用这个私钥来进行远程主机的登录。

  2. 点击下方Save public key,指定公钥的名称,保存公钥。

  3. 点击下方Save private key,指定私钥的名称,保存私钥。
    如果你没有使用密码保护私钥的话,这时 PuTTYgen 会提醒你是否确定不使用密码保护。

  4. 使用用户名密码登录远程主机。
    如果你没有权限登录远程主机,那么你需要联系网络管理员来帮你创建 ~/.ssh/authorized_keys 文件。

  5. 如果你的远程主机中没有 ~/.ssh/authorized_keys 文件,则需要手动创建一个:

     mkdir -p ~/.ssh
    touch ~/.ssh/authorized_keys

    如果已有这个文件,则上面的命令并没有什么卵用

  6. 在你的电脑上,在 PuTTYgen 中,将公钥的内容拷贝一下,然后,在远程主机中把内容复制到 ~/.ssh/authorized_keys 文件中。

  7. 打开 Pageant SSH 认证代理工具。这玩意会在后台运行,你只能在系统托盘区域看到它。右击托盘区域中的图标,选择 Add Key,然后找到你刚才保存的私钥,选择之。

    如果你在创建私钥时使用了密码保护,Pageant 会询问你的密码是什么。

  8. 现在 Pageant 会把私钥保存在内存中,当你使用 PuTTY 访问远程主机时,该私钥就会起作用。

  9. 打开 PuTTY 客户端。如图。

PuTTY
* `Session` 页面的 `Host Name (or IP address)` 输入框中,输入远程主机的用户名和地址,例如 `serious@cy198706.com`。

* 在 `Connection type` 中,选择 SSH

* 在左侧列表的 `Category` 中,找到 `Auth` 页面(`Connection > SSH > Auth`)。在 `Auth` 页面的 `Authentication methods` 区域中,勾选 `Attempt authentication using Pageant`。
PuTTY
* 返回 `Session` 页面,在 `Saved Sessions` 区域中输入一个名称用来保存这套配置,然后点击保存。

* 点击 `Open` 连接到远程主机。当 Pageant 在后台运行时,PuTTY 将会自动获得私钥并使用,在登录到远程主机的过程中不会再次询问私钥的保护密码之类的信息。

* 到这儿配置基本完成。需要注意的是,每次在开机之后,如果要使用 Pageant,就必须手动启动它,添加私钥,再使用 PuTTY。当然也有快捷的办法,下文将会继续介绍。*
  1. 打开“启动”文件夹:

    • Windows 8 下,按 Windows+R,输入 shell:startup 后回车就打开了。

    • Windows 7 下,从开始菜单,点击所有程序,找到启动菜单,右击打开。

    • 或者直接导航到“启动”文件夹:

      C:\Users\your_name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  2. 在文件夹中右键新建一个快捷方式。然后在弹出的对话框的输入框中输入你 Pageant.exe 的路径,也可以使用浏览找到它。接着在该路径的后面加一个空格,输入私钥的位置。例如:

    "C:\Program Files (x86)\PuTTY\pageant.exe" "C:\Users\your_name\ssh_key\putty_private.ppk"

    在下一步中,给快捷方式取个名字,点击完成。

    这样在以后电脑开机之后,就会自动加载该私钥到 Pageant 中,省去了手动启动的麻烦。

Back to top

打赏
支付宝
微信
本文作者:CodingRabbit
版权声明:本文首发于CodingRabbit的博客,转载请注明出处!