小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-09-22 / 5 阅读
0
0

生成非对称密钥ssh-keygen的用法以及使用ssh-copy-id || scp 复制公钥到服务器

第一种方式推荐

ssh-copy-id 是一个非常方便的工具,用于将你的 SSH 公钥复制到远程主机的 ~/.ssh/authorized_keys 文件中,从而实现无密码登录。以下是使用 ssh-copy-id 实现 SSH 无密码登录的三步过程:

第一步:生成 SSH 密钥对(如果还没有的话)

如果你还没有 SSH 密钥对,你需要先生成它。在本地机器上运行以下命令来生成密钥对:

ssh-keygen -t rsa -b 4096

这个命令会创建一个 RSA 类型的 SSH 密钥对,默认情况下,私钥会被保存在 ~/.ssh/id_rsa 而公钥会被保存在 ~/.ssh/id_rsa.pub。你可以选择不同的文件名和路径,或者使用其他类型的密钥(如 ed25519)。

第二步:使用 ssh-copy-id 复制公钥到远程主机

接下来,使用 ssh-copy-id 命令将你的公钥添加到远程服务器上的 authorized_keys 文件中。你需要有该远程主机的用户名和 IP 地址或域名。

ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_host

这里的 -i 参数指定了要使用的公钥文件,username 是你在远程主机上的用户名,remote_host 是远程主机的地址。运行这条命令后,系统可能会提示你输入远程用户的密码。一旦认证成功,你的公钥就会被追加到远程主机的 ~/.ssh/authorized_keys 文件中。

第三步:测试无密码登录

最后,尝试从本地机器 SSH 登录到远程主机,检查是否可以无需密码直接登录:

ssh username@remote_host

如果一切设置正确,你应该能够立即登录而不需要输入密码。

SSH 常用命令

  • ssh user@host:通过 SSH 连接到指定用户和主机。
  • scp local_file user@host:remote_path:安全地复制文件到远程主机。
  • sftp user@host:启动 SFTP 会话进行文件传输。
  • ssh -p port_number user@host:指定 SSH 端口连接。
  • ssh -X user@hostssh -Y user@host:启用 X11 转发以运行图形界面程序。
  • ssh -L [bind_address:]port:host:hostport user@remote:设置本地端口转发。
  • ssh -R [bind_address:]port:host:hostport user@remote:设置远程端口转发。
  • ssh -D [bind_address:]port user@remote:设置 SOCKS 代理。
  • ssh-keygen -lf /path/to/keyfile:显示 SSH 密钥的指纹信息。

请确保在使用这些命令时遵循适当的安全实践,比如定期更换密钥、限制谁可以访问哪些服务等。

第二种方式

在生成公钥要在

/etc/ssh/sshd_config文件配置以下操作

# 开启RSA认证
RSAAuthentication yes
# 公钥认证
PubkeyAuthentication yes
# 认证的公钥信息所在文件
AuthorizedKeysFile .ssh/authorized_keys
# 允许root账户登录
PermitRootLogin yes
# 允许密码认证
PasswordAuthentication yes

systemctl restart sshd 重启sshd进程

通过 scp [-r] 可将文件[/文件夹] 复制到指定服务器上

生成非对称密钥(一路按回车完成密钥生成)

ssh-keygen -t rsa

生成的密钥在用户根目录中的.ssh子目录中,进入.ssh目录查看

执行以下命令复制公钥文件。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

将专用密钥添加到 ssh-agent 的高速缓存中

ssh-add ~/.ssh/id_rsa

将authorized_keys文件复制到slave01、slave02虚拟机的zkpk用户的根目录

scp ~/.ssh/authorized_keys zkpk@slave01:~/

scp ~/.ssh/authorized_keys zkpk@slave02:~/

进入slave01、slave02虚拟机执行

ssh-keygen -t rsa

mv authorized_keys ~/.ssh/

systemctl restart sshd

验证免密钥登录

下面是使用 ssh-keygen 生成 RSA 密钥对并设置密码的详细步骤。我会通过一个具体的例子来展示这个过程。

步骤 1: 打开终端

首先,在你的本地机器上打开一个终端窗口(在Linux或macOS中是Terminal,在Windows中可以是PowerShell或者Git Bash)。

步骤 2: 运行 ssh-keygen

运行以下命令来开始生成新的RSA密钥对:

ssh-keygen -t rsa -b 4096

这里 -t rsa 指定了要生成的密钥类型为RSA,而 -b 4096 指定了密钥长度为4096位。你也可以选择其他密钥类型如 ed25519,以及不同的密钥长度。

步骤 3: 设置保存位置和文件名

ssh-keygen 会提示你输入保存密钥的位置和文件名。默认情况下,它建议将密钥保存到 ~/.ssh/id_rsa 文件中。如果你接受默认设置,只需按 Enter 键即可。如果你想指定不同的路径或文件名,你可以在此时输入。

例如,如果你想将密钥保存到 ~/.ssh/my_custom_key,你可以输入:

Enter file in which to save the key (/home/your_username/.ssh/id_rsa): /home/your_username/.ssh/my_custom_key

步骤 4: 设置密码

接下来,程序会询问你是否想为私钥设置密码。密码用于保护私钥,即使有人获取了你的私钥文件,没有密码也无法使用该密钥。强烈推荐设置密码以增加安全性。

Enter passphrase (empty for no passphrase):

如果想要设置密码,就在这里输入你的密码;如果不希望设置密码,直接按 Enter 键跳过这一步。然后系统会要求你再次确认密码。

示例对话

$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/your_username/.ssh/id_rsa): /home/your_username/.ssh/my_custom_key
Enter passphrase (empty for no passphrase): [输入你的密码]
Enter same passphrase again: [重复输入你的密码]
Your identification has been saved in /home/your_username/.ssh/my_custom_key.
Your public key has been saved in /home/your_username/.ssh/my_custom_key.pub.
The key fingerprint is:
SHA256:... your_key_fingerprint ... your_username@your_host
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+----[SHA256]-----+

现在你已经成功生成了一个带有密码保护的 RSA 密钥对。私钥保存在 /home/your_username/.ssh/my_custom_key,公钥保存在 /home/your_username/.ssh/my_custom_key.pub

当你使用这个私钥进行 SSH 登录时,如果设置了密码,系统会提示你输入密码。为了方便日常使用,你可以考虑使用 SSH 代理(如 ssh-agent)来管理你的密钥,这样就不需要每次都输入密码了。


评论