ssh-copy-id 的使用方法

本文介绍了一种简单的方法来配置SSH无密码登录,利用ssh-copy-id工具避免手动编辑authorized_keys文件,并解决了SSH端口更改后可能遇到的问题。

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

服务器时常需要配置无密码的登录方式,最一般的设置方式如下:

# ssh-keygen
# cat ~/.ssh/id_rsa.pub | ssh user@server "cat - >> ~/.ssh/authorized_keys"

其实这方法已经很简单了,不过我总记不清如何正确拼写authorized_keys这个文件名。

还好Linux系统里缺省都包含一个名为ssh-copy-id的工具:

# type ssh-copy-id
ssh-copy-id is /usr/bin/ssh-copy-id

你用cat或者more命令看一下就知道ssh-copy-id本身其实就是一个shell脚本,用法很简单:

# ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

再也不用记如何拼写authorized_keys这个文件名了,是不是很爽,可惜别高兴太早了,ssh-copy-id有一个很要命的问题,那就是缺省它仅仅支持SSH运行在22端口的情况,不过实际上出于安全的需要,我们往往都会更改服务器的SSH端口,比如说改成10022端口,这时候你运行ssh-copy-id就会报错了,直接修改ssh-copy-id脚本当然可以修正这个问题,但是那样显得太生硬了,实际上还有更好的办法:

# vi ~/.ssh/config

加上内容:

Host server
Hostname ip
Port 10022

你也可以单独只加入Port一行配置,那样就是一个全局配置,保存后再运行ssh-copy-id命令就不会报错了。

补充:经网友提示,如果端口不是22,不修改config文件,按如下方式也可以:

ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 10022 user@server"
<think>好的,用户现在想了解ssh-copy-id用法以及解决相关的问题。我需要结合之前提供的引用内容,整理出清晰的步骤和常见问题解决方法。首先,用户的历史对话中已经提到了SSH密钥权限错误的修复,现在转向ssh-copy-id使用,可能需要详细说明这个命令的作用和基本用法。根据引用[1]、[2]、[3],ssh-copy-id主要用于将本地公钥复制到远程服务器的authorized_keys文件中,实现免密登录。但引用[1]中提到的一个常见错误是“Noidentities found”,这可能是因为没有指定正确的公钥路径或者用户没有生成密钥。需要解释如何生成密钥对,并正确使用ssh-copy-id。接下来,用户可能遇到的其他问题,比如引用[4]中的“REMOTEHOSTIDENTIFICATION HASCHANGED”错误,这通常是由于服务器密钥变化导致的,需要指导用户如何删除known_hosts中的旧条目。另外,引用[2]和[3]提到权限问题,比如.ssh目录和authorized_keys文件的权限设置不正确,可能导致ssh-copy-id失败。需要将这些内容整合到常见问题解决中,确保用户了解权限调整的重要性。 用户可能需要分步的用法说明,包括基本命令格式、指定端口、指定用户等参数的使用方法。同时,常见问题部分需要覆盖密钥不存在、权限错误、连接拒绝、主机密钥变更等情况,每个问题给出对应的解决步骤和命令示例。 最后,生成的相关问题需要与ssh-copy-idSSH免密登录相关,比如密钥生成、权限配置、调试方法、与其他工具的比较等,帮助用户进一步学习。</think>### SSH-copy-id 使用方法及常见问题解决 #### 一、核心功能与基本用法 `ssh-copy-id` 是自动化部署 SSH 公钥的工具,可将本地公钥写入远程服务器的 `authorized_keys` 文件,实现免密登录[^2][^3]。基本命令格式: ```bash ssh-copy-id [-i 公钥路径] [-p 端口] 用户名@主机名 ``` **典型应用场景**: 1. **默认公钥部署**(使用 `~/.ssh/id_rsa.pub`): ```bash ssh-copy-id user@remote-server ``` 2. **指定非默认公钥**(如自定义密钥 `custom_key.pub`): ```bash ssh-copy-id -i ~/.ssh/custom_key.pub user@remote-server ``` 3. **带端口参数**(适用于非22端口服务器): ```bash ssh-copy-id -p 2222 user@remote-server ``` #### 二、执行流程解析 1. 自动创建远程 `~/.ssh` 目录(若不存在) 2. 将公钥追加到 `authorized_keys` 文件 3. 自动设置远程目录权限: - `~/.ssh` → `700` - `authorized_keys` → `600`[^2] #### 三、常见问题解决 ##### 1. **ERROR: No identities found** **现象**:引用[1]中出现的密钥未找到错误 **原因**: - 未生成密钥对 - 指定了不存在的公钥路径 **解决方案**: ```bash # 生成默认密钥对(按提示操作) ssh-keygen -t rsa -b 4096 # 明确指定公钥路径 ssh-copy-id -i ~/.ssh/custom_key.pub user@host ``` ##### 2. **权限拒绝 (Permission denied)** **排查步骤**: - **检查本地密钥权限**: ```bash chmod 600 ~/.ssh/id_rsa # 私钥 chmod 644 ~/.ssh/id_rsa.pub # 公钥 ``` - **验证远程权限**(登录服务器后执行): ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` ##### 3. **REMOTE HOST IDENTIFICATION HAS CHANGED** **触发条件**:服务器密钥变更导致安全警告(如引用[4]) **解决方法**: ```bash # 删除已知主机中的旧记录 ssh-keygen -R remote-server-ip # 或手动编辑known_hosts文件 vim ~/.ssh/known_hosts ``` ##### 4. **Connection refused 问题** **诊断方法**: ```bash # 测试SSH端口连通性 telnet remote-server 22 # 检查远程SSH服务状态(需登录服务器) systemctl status sshd ``` #### 四、高级技巧 - **批量部署**(需预先配置好SSH连接): ```bash for server in server1 server2 server3; do ssh-copy-id user@$server done ``` - **调试模式**(显示详细执行过程): ```bash ssh-copy-id -v user@remote-server ``` #### 五、跨平台注意事项 - **Windows系统**:使用 Git Bash 或 WSL 执行命令 - **密钥存储位置**: - Linux/macOS: `~/.ssh/` - Windows: `C:\Users\username\.ssh\` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值