黑帽联盟

 找回密码
 会员注册
查看: 534|回复: 0
打印 上一主题 下一主题

[资源教程] 使用 ssh-keygen 和 ssh-copy-id 配置 SSH 密钥实现免密登陆

[复制链接]

895

主题

38

听众

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    前天 13:01
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    前言
    SSH 提供两种认证方式,密码认证和密钥认证,一般我们买来的 VPS 都是密码认证。密码的缺点是很容易被暴力破解,而且密码需要记忆,使用起来麻烦。密钥的好处是,你只需要一对密钥文件:公钥和私钥,公钥相当于门锁,装在 VPS 上,私钥相当于钥匙,放在本地计算机上,登录的过程就像是用钥匙去开锁,有钥匙的人才能打得开,不仅安全,而且方便。此外,公钥可以复制到其它主机和账户,这就像是你装了很多同样门锁。本篇教程将讲解在本地终端使用 ssh-keygen 和 ssh-copy-id 给 VPS 配置 SSH 密钥的方法以及使用 ssh 命令进行密钥登录方法,适用于 Win­dows 10 (1803 后) 的 Pow­er­Shell 或 WSL,Linux 发行版和 ma­cOS 自带的终端,但不仅限于这些环境。如果你在 Win­dows 下使用 Xshell ,那么推荐去看《使用 Xshell 给 Linux VPS 配置 SSH 密钥实现免密登录》这篇教程,配置起来相对更简单。


    使用 ssh-keygen 生成密钥对(私钥和公钥)
    在本地终端中执行 ssh-keygen 命令,提示都不用管,一路回车 (En­ter)。
    1. p3terx@hk2:~$ ssh-keygen
    2. Generating public/private rsa key pair.
    3. Enter file in which to save the key (/home/p3terx/.ssh/id_rsa):
    4. Created directory '/home/p3terx/.ssh'.
    5. Enter passphrase (empty for no passphrase):
    6. Enter same passphrase again:
    7. Your identification has been saved in /home/p3terx/.ssh/id_rsa.
    8. Your public key has been saved in /home/p3terx/.ssh/id_rsa.pub.
    9. The key fingerprint is:
    10. SHA256:qssp3ZnX0bgxbSUOlecZllcDAjX4nqjL3hA/HRtoGd8 p3terx@hk2
    11. The key's randomart image is:
    12. +---[RSA 2048]----+
    13. | .++ o.oo|
    14. | . = = o|
    15. | ... + + |
    16. | *.o + |
    17. | .S+oX.E |
    18. | .+.*oO |
    19. | . ..+.+ O |
    20. | ...o=.+ + |
    21. | .=..=.. |
    22. +----[SHA256]-----+
    复制代码


    操作完后会在 ~/.ssh 目录中生两个密钥文件,id_rsa 为私钥,id_rsa.pub 为公钥。

    科普:~符号代表用户主目录,俗称家目录。其路径与当前登陆的用户有关,在 Linux 中普通用户家目录的路径是/home/用户名,而 root 用户是/root。Win­dowd 10 中路径是C:\Users\用户名。在 ma­cOS 中路径是/Users/用户名。

    使用 ssh-copy-id 配置公钥
    执行以下命令自动将公钥上传并配置到 VPS 上:
    1. ssh-copy-id -i ~/.ssh/id_rsa.pub User@HostName -p Port
    复制代码
    -i为指定公钥路径,后面的~/.ssh/id_rsa.pub是公钥路径。
    User 为用户名,HostName 为 IP 地址,Port 为端口号。
    ssh-copy-id 命令相当于执行了以下复杂的手动操作:

    复制公钥文件中的内容
    1. cat ~/.ssh/id_rsa.pub
    复制代码
    登录到远程主机
    1. ssh User@HostName -p Port
    复制代码
    创建 ~/.ssh 目录
    1. mkdir -p ~/.ssh
    复制代码
    把公钥文件写入到 ~/.ssh/authorized_keys
    1. vim ~/.ssh/authorized_keys
    复制代码
    设置权限
    1. chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
    复制代码
    所以使用 ssh-copy-id 大大简化了 SSH 密钥的配置过程。


    使用 ssh 命令进行密钥登录

    当私钥存在于默认位置 (~/.ssh/id_rsa) 时,会优先使用密钥登录,所以执行的命令与密码登录没有区别。
    1. ssh User@HostName -p Port
    复制代码
    User 为用户名,HostName 为IP地址,Port为端口号。

    当私钥为非默认名称或者不在 ~/.ssh 目录时,就需要指定私钥路径。比如我将 id_rsa 改成了 p3terx:
    1. ssh -i ~/.ssh/p3terx User@HostName -p Port
    复制代码
    -i为指定私钥路径,后面的~/.ssh/p3terx是私钥路径。


    使用 SSH 配置文件管理会话

    如果你有多个 VPS 使用不同密钥,那么使用 SSH 配置文件 ( ~/.ssh/config ) 进行管理是一种优雅且灵活的方式。这相当于在类似 Xshell 这样的图形化 SSH 工具中对每个 SSH 会话连接进行单独设置并保存起来,省去了重复输入复杂参数的过程。
    SSH 配置文件默认是不存在的,所以使用 nano 编辑器创建并编辑:
    1. nano ~/.ssh/config
    复制代码
    然后参照下面的例子进行填写。
    1. Host P3TERX_VPS
    2.     HostName 233.233.233.233
    3.     Port 2333
    4.     User p3terx
    5.     IdentityFile "~/.ssh/id_rsa"
    6.     IdentitiesOnly yes

    7. Host P3TERX_VPS2
    8.     HostName 66.66.66.66
    9.     Port 6666
    10.     User p3terx
    11.     IdentityFile "~/.ssh/id_ecdsa"
    12.     IdentitiesOnly yes
    复制代码
    Host 别名
    HostName 主机名,可以用 IP 地址或域名
    Port 端口,不填写默认为 22
    User 用户名
    IdentityFile 私钥的路径,可指定多个私钥,在连接的过程中会依次尝试。
    IdentitiesOnly 只接受 SSH key 登录

    编辑好保存并退出,然后设置权限,不然可能无法正常使用。
    1. chmod 600 ~/.ssh/config
    复制代码
    当以上操作完成,以后登录 VPS 就只需要在终端内输入 ssh Host 就可以登录到 VPS ,就像下面这样:
    1. ssh P3TERX_VPS
    复制代码
    禁用密码登录
    在确认使用密钥能正常登录后,为了提高 VPS 的安全性建议禁用密码登录。
    执行以下命令,对 sshd 配置文件 (/etc/ssh/sshd_config) 进行修改。
    1. sudo sed -i '/PasswordAuthentication /c\PasswordAuthentication no' /etc/ssh/sshd_config
    复制代码
    最后重启 sshd 服务,使配置生效。
    1. sudo service sshd restart
    复制代码
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部