欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

linux ssh-copy-id 详解 文心一言 通义 chatgpt 有大用

私钥相当于钥匙 公钥相当于锁


https://www.bilibili.com/video/BV1y4411q7PW/?spm_id_from=333.337.search-card.all.click&vd_source=346847773d1f74962a4daab9ddf7f228 

【小知识】第6期 SSH免密登录的原理

image.png



ssh-copy-id 是一个用于自动化地将 SSH 公钥复制到远程服务器上的 ~/.ssh/authorized_keys 文件的脚本。这个命令大大简化了 SSH 免密码登录的设置过程,使得用户无需每次连接远程服务器时都输入密码。下面是对 ssh-copy-id 命令的详细解释:

基本用法

bash复制代码

ssh-copy-id [-i [identity_file]] [user@]hostname
  • -i [identity_file]:可选参数,用于指定 SSH 私钥文件的路径。如果不指定,ssh-copy-id 会尝试使用默认的 SSH 私钥文件,通常位于 ~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/id_ecdsa 或 ~/.ssh/id_ed25519

  • [user@]hostname:指定远程服务器的用户名和主机名。如果省略用户名,则使用当前用户的用户名。

工作流程

  1. 验证私钥:首先,ssh-copy-id 会检查指定的私钥文件是否存在且有效。

  2. 尝试连接远程服务器:使用 SSH 协议(默认端口 22,但可以通过 SSH 客户端的 -p 参数指定其他端口)尝试连接到远程服务器。如果连接成功,ssh-copy-id 会继续执行;如果连接失败(例如,因为需要密码或密钥认证失败),则命令会失败。

  3. 检查 ~/.ssh/authorized_keys 文件:如果远程服务器上已存在 ~/.ssh/authorized_keys 文件,ssh-copy-id 会检查文件中是否已经包含了要添加的公钥。如果已包含,则命令会提前结束,避免重复添加。

  4. 添加公钥:如果公钥尚未添加到 ~/.ssh/authorized_keys 文件中,ssh-copy-id 会通过 SSH 连接将公钥追加到该文件的末尾。

  5. 设置权限:为了安全起见,ssh-copy-id 会检查远程服务器上的 ~/.ssh 目录和 ~/.ssh/authorized_keys 文件的权限设置,并尝试将它们设置为安全的默认值(通常是 ~/.ssh 目录的权限为 700,~/.ssh/authorized_keys 文件的权限为 600)。

注意事项

  • 使用 ssh-copy-id 时,需要确保你有足够的权限在远程服务器上修改 ~/.ssh/authorized_keys 文件。

  • 如果远程服务器的 SSH 服务配置为不允许使用公钥认证,ssh-copy-id 将无法工作。

  • ssh-copy-id 只会添加公钥到 ~/.ssh/authorized_keys 文件中,而不会删除或修改文件中已存在的其他公钥。

  • 在使用 ssh-copy-id 之前,请确保你的 SSH 私钥是安全的,并且不要将私钥文件存储在公共或不受信任的地方。

结论

ssh-copy-id 是一个非常方便的工具,用于自动化地设置 SSH 免密码登录。通过减少密码的使用,它提高了安全性和便利性,使得远程服务器管理变得更加轻松。




ssh-copy-i

证而非密码认证来进行身份验证。

基本语法

bash
深色版本
1    ssh-copy-id [options] user@host

选项说明

  • -i keyfile: 指定要使用的公钥文件。如果不指定,默认使用 $HOME/.ssh/id_rsa.pub 或 $HOME/.ssh/id_dsa.pub

  • -n: 如果指定了此选项,则不会打印出成功消息。

  • -f: 强制覆盖已存在的公钥文件。

  • -o ssh_options: 传递额外的 SSH 选项给 ssh 命令。

  • -p port: 指定 SSH 服务使用的端口。

  • -q: 安静模式,不输出任何信息。

  • -t: 指定公钥被添加到 .ssh/authorized_keys 文件后的位置。

  • -v: 显示详细信息。

示例

  1. 复制默认的公钥到远程主机:

    bash
    深色版本
    1    ssh-copy-id user@example.com

    这条命令会尝试从你的本地 .ssh/id_rsa.pub.ssh/id_dsa.pub 文件中复制公钥到 example.com 主机上的 user 用户账户。

  2. 指定公钥文件:

    bash
    深色版本
    1    ssh-copy-id -i ~/.ssh/my_key.pub user@example.com

    这条命令会使用 ~/.ssh/my_key.pub 文件中的公钥。

  3. 指定 SSH 端口:

    bash
    深色版本
    1    ssh-copy-id -p 2222 user@example.com

    如果远程主机使用非标准端口(如 2222),可以使用 -p 选项指定。

  4. 强制覆盖远程主机上的公钥文件:

    bash
    深色版本
    1    ssh-copy-id -f user@example.com

    如果远程主机的 .ssh/authorized_keys 文件中已经有该用户的公钥,使用 -f 选项将会覆盖原有的公钥。

  5. 安静模式:

    bash
    深色版本
    1    ssh-copy-id -q user@example.com

    这条命令不会输出任何信息,即使成功也不会显示消息。

  6. 使用额外的 SSH 选项:

    bash
    深色版本
    1    ssh-copy-id -o StrictHostKeyChecking=no user@example.com

    这条命令会在连接时跳过主机密钥检查。

  7. 指定公钥在远程主机上的位置:

    bash
    深色版本
    1    ssh-copy-id -t command user@example.com

    可以使用 -t 选项指定公钥应该被添加到哪个位置,通常不需要使用此选项。

工作原理

ssh-copy-id 命令的工作流程如下:

  1. 读取本地的公钥文件。

  2. 使用 ssh 命令连接到远程主机。

  3. 将公钥添加到远程主机的 ~/.ssh/authorized_keys 文件中。

  4. 如果文件不存在,则创建它。

  5. 设置适当的权限以确保安全性。

注意事项

  • 确保远程主机上存在用户账户,并且该账户有家目录和 .ssh 目录。

  • 如果远程主机上 .ssh 目录或 authorized_keys 文件的权限设置不正确,可能会导致无法正确添加公钥。

  • 为了安全起见,通常建议使用强密码保护私钥文件。

使用 ssh-copy-id 可以大大简化 SSH 密钥管理和无密码登录的过程,提高工作效率的同时也增强了安全性。


普通分类: