命令简介

ssh-copy-id是一个用于安全地将本机的SSH公钥复制到远程主机的工具。它可以自动将您的公钥添加到远程主机的authorized_keys文件中,从而允许您在不输入密码的情况下通过SSH连接到该主机。

命令格式

1
ssh-copy-id [options] [user@]hostname

参数说明

参数 说明 备注
-i identity_file 指定要复制的身份(私钥)文件 默认为~/.ssh/id_rsa
-o ssh_option 传递给ssh命令的选项 可以多次使用此选项
-p port 指定远程主机的SSH端口 默认为22
-f 强制模式,如果目录主机的authorized_keys文件已存在则覆盖它
-n 防止重复,如果远程主机已经有了相同的密钥则不添加

命令实例

基本用法

1.将本地默认公钥复制到远程主机

1
ssh-copy-id user@remote_host

上面的命令将本机的默认公钥(~/.ssh/id_rsa.pub)复制到远程主机的authorized_keys文件中。

2.指定要复制的公钥文件

1
ssh-copy-id -i ~/.ssh/my_key.pub user@remote_host

该命令将本机的~/.ssh/my_key.pub公钥复制到远程主机。

3.指定远程主机的SSH端口

1
ssh-copy-id -p 2222 user@remote_host

上面的命令将公钥复制到远程主机的2222端口。

4.强制覆盖远程主机的authorized_keys文件

1
ssh-copy-id -f user@remote_host

该命令将在远程主机上覆盖已有的authorized_keys文件。

5.防止重复添加相同的公钥

1
ssh-copy-id -n user@remote_host

上面的命令会先检查远程主机是否已经有相同的公钥,如果有则不会重复添加。

高级用法

1.在脚本中使用ssh-copy-id

1
2
3
4
5
6
7
8
9
#!/bin/bash

# 读取主机列表
hosts=("host1" "host2" "host3")

# 遍历主机列表,复制公钥
for host in "${hosts[@]}"; do
ssh-copy-id "$host"
done

上面的脚本演示了如何在bash脚本中使用ssh-copy-id命令,批量将本机的公钥复制到多个远程主机。

2.使用密钥认证进行自动化部署

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

# 复制公钥到目标主机
ssh-copy-id user@target_host

# 通过SSH连接执行部署操作
ssh user@target_host '
git clone https://example.com/my_app.git
cd my_app
./deploy.sh
'

上面的示例展示了如何使用ssh-copy-id实现无密码SSH连接,然后在目标主机上执行自动化部署操作。这种方式可以极大地简化自动化部署流程,提高效率和安全性。

通过以上示例,我们可以看到ssh-copy-id命令在SSH密钥管理和自动化部署中扮演着非常重要的角色。它可以安全地将本机的公钥复制到远程主机,从而实现无密码SSH连接。同时,它还提供了一些有用的选项,如指定要复制的密钥文件、远程主机端口等。我们还可以将ssh-copy-id与其他命令和脚本结合使用,实现批量复制公钥、自动化部署等高级功能。总之,ssh-copy-id是一个非常实用的工具,可以极大地提高SSH连接和自动化操作的便利性。