欢迎阅读《每天一个Linux命令》系列!在本篇文章中,将介绍通过密钥生成,使用公钥连接管理服务器。
概念
SSH 密钥是用于安全地访问远程服务器的一种方法。SSH 密钥由一对密钥组成:公钥和私钥。公钥存储在远程服务器上,私钥存储在本地计算机上。
通过公钥连接管理Linux服务器优缺点:
优点:
- 安全性: 公钥身份验证比密码身份验证更安全。公钥是一个加密的密钥对,私钥保存在客户端,而公钥保存在服务器上。
- 无需密码: 公钥身份验证消除了密码管理的需求。用户无需记住复杂的密码,而且在服务器上也不需要存储密码。
- 方便性: 一旦设置了公钥身份验证,用户就可以轻松地连接到服务器,而无需每次都输入密码。
- 多因素认证: 公钥身份验证可以与其他身份验证方法结合使用,实现多因素认证。例如,可以使用密码和公钥的组合进行认证,提高安全性。
缺点:
-
密钥管理: 公钥身份验证需要有效地管理密钥对。如果私钥丢失或泄露,可能会导致安全问题。
-
初次设置复杂性: 初次设置公钥身份验证可能会相对复杂,特别是对于不熟悉密钥管理的用户来说。然而,一旦设置完成,后续的连接将更为简单。
-
无法处理丢失的私钥: 如果用户丢失了私钥,他们将无法再次连接到服务器,除非管理员重新配置他们的公钥。
-
不适用于所有场景: 公钥身份验证不适用于所有场景。在某些情况下,可能需要使用其他身份验证方法,如密码身份验证或证书身份验证。
总体而言,使用公钥连接管理Linux服务器提供了更高的安全性和便捷性,但需要合理管理密钥对以确保系统的整体安全。
生成密钥
在本地计算机上生成 SSH 密钥,可以使用 ssh-keygen
命令。
ssh-keygen
提示的意思(可以直接回车,留空默认):
此命令将提示您输入以下信息:
- 文件名:用于存储密钥的文件名。默认为
id_rsa
。 - 密码:用于保护私钥的密码。可以留空。
- 重复密码:确认密码。
生成密钥后,将在本地计算机上创建两个文件:
id_rsa
:私钥文件。id_rsa.pub
:公钥文件。
[root@chatgpt-test ~]# ll /root/.ssh
总用量 12
-rw-------. 1 root root 1675 12月 8 08:00 id_rsa
-rw-r--r--. 1 root root 399 12月 8 08:00 id_rsa.pub
-rw-r--r--. 1 root root 347 11月 21 05:19 known_hosts
将公钥复制到远程服务器
可以使用 cat
命令+远程命令+重定向组合
cat ~/.ssh/id_rsa.pub | ssh 用户名@远程服务器地址 'cat >> ~/.ssh/authorized_keys'
此命令将将公钥追加到远程服务器上的 authorized_keys
文件中。
演示示例:
假设本地服务器用户名为 root
,IP为192.168.31.223,远程服务器的 IP 地址为 192.168.31.162
,则生成密钥并将公钥复制到远程服务器的操作如下:
#在本地计算机上生成密钥,执行命令后,根据提示,可以设置私钥密码,或者直接回车3次(默认),生成密钥。
[root@chatgpt-test ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8IlsI9RZn/sDvn10OB5mvm8d+yP/0rVb5cwNQbT1wlg root@chatgpt-test
The key's randomart image is:
+---[RSA 2048]----+
| . .E .|
| . o . . = o.|
| . + o . = .|
| . . + . . o |
| . = S o ...|
| o . . o B*=|
| . o* =%|
| o o=+=|
| . ..+BO|
+----[SHA256]-----+
将公钥复制到远程服务器
从192.168.31.223将公钥复制到192.168.31.162
cat ~/.ssh/id_rsa.pub | ssh root@192.168.31.162 'cat >> ~/.ssh/authorized_keys'
注意事项
- 在生成密钥时,建议使用强密码来保护私钥。
- 在复制公钥时,请确保远程服务器上的
authorized_keys
文件具有可写权限。
其他方法
也可以使用 cp
命令来将公钥复制粘贴到远程服务器。
或者通过ssh-copy-id 用户名@远程服务器地址
,此命令将公钥复制到远程服务器上的 authorized_keys
文件中。
命令操作
使用 SSH 密钥登录远程服务器的命令如下:
ssh [选项] 用户名@远程服务器地址
命令详细解释
ssh 命令的参数如下:
参数 | 说明 |
---|---|
选项 | 可选参数,用于指定 SSH 连接的属性。 |
用户名 | 远程服务器上的用户名。 |
远程服务器地址 | 远程服务器的 IP 地址或主机名。 |
命令选项
选项 | 说明 |
---|---|
-i | 指定私钥文件的路径。 |
-p | 指定远程服务器的端口号。 |
-t | 启用终端模式。 |
-v | 显示 ssh 命令执行的详细信息。 |
注意事项
- 在使用 SSH 密钥登录远程服务器之前,需要在本地计算机上生成 SSH 密钥并将公钥复制到远程服务器。
- 可以使用
ssh-keygen
命令生成 SSH 密钥。 - 可以使用
cat
命令将公钥复制到远程服务器。
sshkey 命令的使用技巧
- 可以使用选项 -i 指定私钥文件的路径。如果不指定此选项,则 ssh 命令将使用默认的私钥文件。
- 可以使用选项 -p 指定远程服务器的端口号。如果不指定此选项,则 ssh 命令将使用默认的端口号 22。
- 可以使用选项 -t 启用终端模式。如果不指定此选项,则 ssh 命令将启用交互式模式。
- 可以使用选项 -v 显示 ssh 命令执行的详细信息。
以下是一些使用 sshkey 设置完成后演示命令的示例:
示例1:使用默认的私钥文件登录远程服务器
ssh root@192.168.31.162
验证:
[root@chatgpt-test ~]# ssh root@192.168.31.162
Last login: Thu Nov 30 08:24:49 2023 from 192.168.31.223
[root@localhost ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 02:11:32:2a:0f:96 brd ff:ff:ff:ff:ff:ffinet 192.168.31.162/24 brd 192.168.31.255 scope global noprefixroute eth0
示例2:使用指定的私钥文件登录远程服务器
ssh -i ~/.ssh/id_rsa root@192.168.31.162
示例3:使用指定的端口号登录远程服务器
ssh -p 2222 root@192.168.31.162
通过SSH软件登录
soreceCRT无密码登录centos7
将生成的私钥,通过命令sz ~/.ssh/id_rsa.pub
下载到本地,通过crt软件读写私钥文件进行登录
即可无秘访问192.168.31.162
-
设置公钥优先级再前,密码验证再后
-
添加公钥(点击-属性,选择公钥在本机的路径)