配置ssh密钥登陆

Catalogue
  1. 1. 生成SSH_key
  2. 2. 上传公钥到服务器
    1. 2.1. 第二种方法 ssh-copy-id 复制公钥到服务器
  3. 3. 配置服务器端配置文件
  4. 4. 配置本地 ssh 文件
  5. 5. 使用
  6. 6. 持有多个 ssh-key 时的使用方法
  • 参考资料
    1. 生成SSH_key

      我觉得在本地机器或者远端机器生成都可以,如果已经存在就可以直接用,这里是本地机器生成。

      1
      ssh-keygen -t rsa     #ssh-keygen -b 4096 -t rsa

      这样会在当前目录生成名为id_rsa的私钥文件和名为id_rsa.pub的公钥文件,-t表示密钥类型是rsa。
      如果你只输入ssh-keygen生成的RSA密钥长度为2048,如果你对安全性要求比较高可以指定4096位的长度,这里-b就是多少位,当然你对这些参数感兴趣可以使用–help参数看看具体的含义和解释。

      当你在生成SSHKEY的时候在命令行下会提示你Enter file in which to save the key,让你确认密钥文件保存的路径,
      一般回车即可(一般默认会在当前用户家目录下的.ssh目录下)。

      第二个提示是 Enter passphrase (empty for no passphrase) 让你输入一个密钥的密码,如果不输入则留空;回车生成公私钥完毕 :)
      此时你可以使用cat命令看下自己的公私钥。

    2. 上传公钥到服务器

      我们前面在自己的操作系统生成了公私钥,需要上传给服务器

      将本地的公钥文件上传到服务器上,然后在服务器需要免密登录的用户家目录下查看是否有 ~/.ssh/authorized_keys 这个文件,
      如果没有手动创建一个:

      1
      touch ~/.ssh/authorized_keys

      然后我们将公钥内容写入到authorized_keys文件中,因为这个文件可能已经有内容了,所以你可以使用如下方式

      1
      cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys #-n 或 --number:由 1 开始对所有输出的行数编号

      这样就将公钥内容追加到authorized_keys中了,然后需要注意配置权限了,否则SSH不会工作的,我在这里踩了坑。。

      • 将.ssh目录的权限为700
      • 将authorized_keys目录的权限为600
      第二种方法 ssh-copy-id 复制公钥到服务器
      1
      ssh-copy-id -p 8888  username@remote-server # -p 不是默认的22口时需要指定
    3. 配置服务器端配置文件

      主要是确保 PubkeyAuthentication yes 这行启用这样才会用密钥登陆,其他选项自己看情况

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      $ vim /etc/ssh/sshd_config

      # 禁用root账户登录,非必要,但为了安全性,请配置
      PermitRootLogin no

      # 是否让 sshd 去检查用户家目录或相关档案的权限数据,这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。例如使用者的 ~/.ssh/ 权限设错时,某些特殊情况下会不许用户登入
      StrictModes no

      # 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
      RSAAuthentication yes
      PubkeyAuthentication yes
      AuthorizedKeysFile %h/.ssh/authorized_keys

      # 有了证书登录了,就禁用密码登录吧,安全要紧
      PasswordAuthentication no
    4. 配置本地 ssh 文件

      1
      2
      3
      4
      5
      6
      vim ~/.ssh/config 
      Host yourserver
      HostName 192.168.11.22
      Port 12345
      User your_username
      IdentityFile ~/.ssh/id_rsa #你私钥的位置
    5. 使用

      现在试一下 ssh xx.xx.xx.xx 应该可以不用输入密码了

    6. 持有多个 ssh-key 时的使用方法

      简单情况下,通过手动指定私钥文件登录

      1
      $ ssh username@hostname -i ~/.ssh/my_id_rsa

      在工作中经常需要使用不同的私钥登录不同的服务器,遂需要对不同的私钥进行管理

      首先,在新增私钥的时候需要通过不同的文件名来生成不同的私钥文件

      1
      2
      ssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "key for work"
      ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "key for github"

      新增ssh配置文件,并修改权限

      1
      2
      touch ~/.ssh/config
      chmod 600 ~/.ssh/config

      编辑配置文件

      1
      2
      3
      4
      5
      6
      7
      8
      9
      vi ~/.ssh/config
      Host *.workdomain.com
      HostName *.workdomain.com
      IdentityFile ~/.ssh/id_rsa.work

      Host github.com
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa.github
      • Host为别名
      • HostName为服务器的域名或IP
      • User表示用哪个用户名登录
      • IdentityFile表示用哪个私钥进行认证

      登录

      1
      ssh root@www.workdomain.com

      1
      ssh github.com

    参考资料