配置ssh密钥登陆

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

参考资料