SSH是“Secure Shell”的简称,用于安全地访问远程服务器。ssh-copy-id是一个将本地主机的公钥复制到远程主机的认证文件中的脚本,这样可以帮助实现无密码SSH登录,提高安全性和便捷性。
Linux ssh-copy-id命令介绍
ssh-copy-id(SSH Copy ID),主要用于将本地的SSH公钥文件复制到远程主机的~/.ssh/authorized_keys
文件中。这一步骤是实现SSH密钥认证的重要环节,可以让用户在无需输入密码的情况下安全登录远程主机。
Linux ssh-copy-id命令适用的Linux版本
ssh-copy-id命令在大多数Linux发行版中都是预装的。但如果在某些系统中没有找到该命令,可以根据下面的指令进行安装:
# 基于apt的发行版(如Debian、Ubuntu、Raspbian、Kali Linux等)
sudo apt-get update && sudo apt-get install openssh-client
# 基于yum的发行版(如RedHat,CentOS 7等)
sudo yum update && sudo yum install openssh-clients
# 基于dnf的发行版(如Fedora,CentOS 8等)
sudo dnf update && sudo dnf install openssh-clients
# 基于apk的发行版(如Alpine Linux)
sudo apk add --update openssh-client
# 基于pacman的发行版(如Arch Linux)
sudo pacman -Syu && sudo pacman -S openssh
# 基于zypper的发行版(如openSUSE)
sudo zypper ref && sudo zypper in openssh
# 基于pkg的FreeBSD发行版
sudo pkg update && sudo pkg install openssh
# 基于Homebrew的OS X/macOS发行版
brew update && brew install openssh
Linux ssh-copy-id命令的基本语法
基本的命令语法如下:
ssh-copy-id [选项] [用户@]主机
Linux ssh-copy-id命令的常用选项或参数说明
以下是ssh-copy-id
命令的一些常用选项:
选项 | 描述 |
---|---|
-i 文件 | 指定要复制的公钥文件,默认是~/.ssh/id_rsa.pub |
-f | 强制复制,不进行预先检查 |
-n | 进行试运行,实际并不复制公钥文件 |
-p 端口 | 指定远程主机的SSH端口,默认是22 |
-o 选项 | 传递给ssh命令的选项 |
-h | 显示帮助信息 |
Linux ssh-copy-id命令实例详解
实例1:复制本地公钥到远程主机
将本地用户的公钥复制到远程主机用户的~/.ssh/authorized_keys
文件中,实现无密码SSH登录。
[linux@bashcommandnotfound.cn ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@远程主机地址
实例2:自定义SSH端口的公钥复制
如果远程主机的SSH服务不是运行在默认端口22上,可以使用-p
选项指定端口。
[linux@bashcommandnotfound.cn ~]$ ssh-copy-id -p 2222 用户名@远程主机地址
实例3:试运行ssh-copy-id
在实际复制之前,你可以使用-n
选项来进行试运行,检查会进行哪些操作。
[linux@bashcommandnotfound.cn ~]$ ssh-copy-id -n 用户名@远程主机地址
示例 4:使用特定的 SSH 密钥文件复制公钥
如果您有多个 SSH 密钥对,并希望使用非默认的密钥文件,可以使用 -i
选项来指定特定的公钥文件。
[linux@bashcommandnotfound.cn ~]$ ssh-copy-id -i ~/.ssh/my_other_key.pub 用户名@远程主机地址
示例 5:在复制公钥时指定 SSH 连接选项
使用 -o
选项可以传递额外的 SSH 选项,例如,指定使用特定的密码认证方法。
[linux@bashcommandnotfound.cn ~]$ ssh-copy-id -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" 用户名@远程主机地址
示例 6:强制复制公钥到远程主机
如果您确定要复制公钥,并且不希望 ssh-copy-id
进行任何预先检查,可以使用 -f
选项。
[linux@bashcommandnotfound.cn ~]$ ssh-copy-id -f 用户名@远程主机地址
示例 7:将公钥复制到具有不同用户名的远程主机
如果您需要将公钥复制到远程主机上具有不同用户名的用户账户,您需要在命令中指定该用户名。
[linux@bashcommandnotfound.cn ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub otheruser@远程主机地址
示例 8:将公钥复制到多个远程主机
虽然 ssh-copy-id
本身不支持同时复制到多个主机,但您可以编写一个简单的循环来实现这一点。
for host in host1.example.com host2.example.com host3.example.com; do
ssh-copy-id 用户名@$host
done
注意事项
在使用 ssh-copy-id
时,以下是一些应该注意的事项:
- 确保远程主机上的
~/.ssh
目录和~/.ssh/authorized_keys
文件的权限设置正确。 - 如果远程主机的 SSH 服务配置了禁止公钥认证,
ssh-copy-id
将无法工作。 - 在复制公钥之前,您必须至少有一次使用密码登录到远程主机,除非您已经有其他方式的访问权限。
- 如果您的本地客户端或远程主机是首次使用 SSH,可能会提示您验证主机的指纹。
- 使用
-f
选项强制复制公钥时要小心,因为它可以覆盖远程主机上现有的authorized_keys
文件内的密钥。
评论区