第一种方式推荐
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@host
或ssh -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
)来管理你的密钥,这样就不需要每次都输入密码了。