侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux ssh-copy-id命令教程:轻松设置SSH密钥认证(附实例详解和注意事项)

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 文件内的密钥。
0

评论区