ssh-copy-id 匿名登陆

本文介绍如何通过三个步骤配置SSH免密登录:首先使用ssh-keygen生成公钥和私钥;接着利用ssh-copy-id将公钥复制到远程主机;最后验证是否可以不输入密码直接登录远程主机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。 
ssh-keygen 创建公钥和密钥。 
ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
ssh-copy-id 也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限 。

步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥
ligh@local-host$ ssh-keygen -t  rsa
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key] 
Enter passphrase (empty for no passphrase): [Press enter key]
Enter same passphrase again: [Pess enter key]
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub. 
The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 
ligh@local-host

步骤2: 用 ssh-copy-id 把公钥复制到远程主机上
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.0.3
ligh@remote-host‘s password:
Now try logging into the machine, with ―ssh ?remote-host‘‖, and check in: 
.ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting.
[注: ssh-copy-id 把密钥追加到远程主机的 .ssh/authorized_key 上.]

步骤3: 直接登录远程主机
ligh@local-host$ ssh remote-host 
Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2 
[注: SSH 不会询问密码.] 
ligh@remote-host$ 
[注: 你现在已经登录到了远程主机上]
<think>好的,用户想了解如何使用ssh-copy-id命令以及相关的示例。我需要先整理已有的引用内容,确保信息准确且符合用户的需求。首先,根据引用内容,ssh-copy-id主要用于将本地公钥复制到远程主机的authorized_keys文件中,从而实现SSH免密登录。 首先,需要明确命令的基本用法,比如最简单的形式是ssh-copy-id user@host,这里可能需要用户替换实际的用户名和主机地址。引用中多次提到这一点,比如引用[1]和引用[3]中的示例。然后,用户可能需要指定不同的公钥文件,这时候就需要用到-i选项,比如ssh-copy-id -i ~/.ssh/mykey user@host,这在引用[1]和引用[3]都有提到。 接下来,需要解释各个选项的作用。-i指定公钥文件,-f强制模式,-n测试不实际执行,-p指定端口,-o传递其他SSH选项。这些选项在引用[2]和引用[3]中都有详细说明,需要一一列举出来,让用户清楚每个选项的用途。 然后,常见的使用示例也是用户关心的。比如如何指定不同的端口,或者如何强制覆盖已有的公钥。比如ssh-copy-id -p 2222 user@host,或者使用-f参数。引用中的示例已经覆盖了这些情况,需要整理成清晰的列表。 另外,用户可能遇到没有ssh-copy-id的情况,比如在Windows或某些Linux发行版中。这时候需要提供替代方法,如手动追加公钥内容到authorized_keys文件,或者使用scp和cat命令组合。引用[4]和引用[5]提到了这些方法,比如使用scp复制公钥文件,然后通过SSH连接到远程主机并追加内容。或者像引用[5]中提到的在PowerShell中使用管道操作。 还需要注意权限问题,引用[2]和引用[3]提到ssh-copy-id会自动设置正确的权限,但如果用户手动操作的话,可能需要检查远程主机的.ssh目录和authorized_keys文件的权限是否正确,通常目录权限应为700,文件权限为600或644。这可能需要在注意事项里提醒用户。 最后,整理步骤,确保结构清晰。先介绍基本用法,再详细说明选项,然后给出示例,最后处理特殊情况和其他方法。同时,根据用户提供的引用内容,正确标注引用来源,比如引用[1]、引用[2]等,保持信息的准确性和可信度。 需要检查是否覆盖了用户可能遇到的问题,比如指定不同端口、不同公钥位置、权限问题以及替代方法。同时语言要简洁明了,避免技术术语过多,让用户容易理解。另外,生成的相关问题需要围绕ssh-copy-id的使用和可能的问题展开,比如权限问题、替代方法、参数使用等,帮助用户进一步了解相关知识点。</think>### 使用 `ssh-copy-id` 命令配置 SSH 免密登录 #### 一、基本功能与原理 `ssh-copy-id` 用于将本地 SSH 公钥添加到远程服务器的 `~/.ssh/authorized_keys` 文件中,实现免密登录。它会自动设置远程服务器上 `.ssh` 目录和文件的权限(如目录权限为 `700`,`authorized_keys` 权限为 `600`)[^2][^3]。 --- #### 二、命令语法 ```bash ssh-copy-id [-i 公钥路径] [-p 端口号] [-f] [-n] [用户@主机名] ``` --- #### 三、核心参数详解 1. **`-i <公钥路径>`** 指定要使用的公钥文件(默认使用 `~/.ssh/id_rsa.pub`) **示例**: ```bash ssh-copy-id -i ~/.ssh/mykey.pub user@host ``` 2. **`-p <端口号>`** 指定 SSH 连接端口(默认 `22`) **示例**: ```bash ssh-copy-id -p 2222 user@host ``` 3. **`-f`** 强制覆盖远程 `authorized_keys` 中的已有公钥[^2] 4. **`-n`** 仅模拟操作(用于测试,不实际执行)[^2] --- #### 四、完整示例 1. **基本用法** ```bash ssh-copy-id user@host # 使用默认公钥(~/.ssh/id_rsa.pub) ``` 2. **指定自定义公钥与端口** ```bash ssh-copy-id -i ~/.ssh/work_key.pub -p 2222 user@host ``` 3. **强制模式** ```bash ssh-copy-id -f user@host # 覆盖远程已有公钥 ``` --- #### 五、无 `ssh-copy-id` 时的替代方案 1. **手动追加公钥内容** ```bash # 将公钥复制到远程服务器并追加到 authorized_keys scp ~/.ssh/id_rsa.pub user@host:~/ ssh user@host "cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" ``` 2. **Windows PowerShell 实现** ```powershell type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@host "cat >> .ssh/authorized_keys" ``` (适用于 Windows OpenSSH 客户端)[^5] --- #### 六、注意事项 1. **本地私钥权限** 确保本地私钥文件权限为 `600`: ```bash chmod 600 ~/.ssh/id_rsa ``` 2. **远程服务器权限** 若手动操作,需确认远程服务器权限: ```bash chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys ``` --- §§ 1. SSH 免密登录失败时如何排查权限问题? 2. 如何通过 `ssh-copy-id` 为多个服务器批量配置公钥? 3. 使用 `-o` 参数传递 SSH 选项的具体场景是什么?[^2] 4. 为何有时需要手动设置 `StrictHostKeyChecking=no`? 5. 如何生成不同用途的 SSH 密钥对?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值