cxl
Published on 2025-03-14 / 1,252 Visits
64
0

SSH 免登录

在 Linux 系统管理和服务器运维工作中,频繁使用 SSH 登录服务器是日常操作之一。传统登录方式每次都需输入密码,这不仅繁琐,还会在自动化脚本和批量操作场景中带来诸多不便。SSH 免登录功能为解决这一问题提供了有效途径。接下来,本文将详细介绍其原理、设置方法及应用场景。

原理

SSH(Secure Shell)协议用于在网络上安全地传输数据和执行命令。SSH 免登录基于公钥加密技术实现。简单来说,当你希望从客户端(本地机器)免登录到服务器端时,会在客户端生成一对密钥:公钥(public key)和私钥(private key)。公钥如同一个公开的 “锁”,可以分发给任何你信任的服务器;私钥则像对应的 “钥匙”,必须妥善保管在客户端,不能泄露。​

当你尝试通过 SSH 连接到服务器时,服务器会检查是否有与客户端公钥匹配的记录。如果有,服务器会使用该公钥对一个随机数进行加密,并将加密后的结果发送给客户端。客户端收到后,使用自己的私钥对其解密,并将解密后的结果再发送回服务器。服务器通过验证该结果是否与之前发送的随机数一致,来确认客户端的身份。如果一致,则允许免密码登录。这种方式避免了在网络中传输密码,大大提高了安全性。

使用

生成密钥对

使用 ssh-keygen -t rsa 命令,注意在 Enter passphrase (empty for no passphrase) 这里不要输入密码,否则就不是免密了,而是每次通过ssh连接就要输入这个密码了。

复制公钥到服务器

方法一:使用 ssh-copy-id 命令

如果客户端安装了ssh-copy-id工具,可直接使用该命令将公钥复制到服务器。命令格式为:

	ssh-copy-id username@server_address

其中,username是你在服务器上的用户名,server_address是服务器的 IP 地址或域名。执行命令后,系统会提示你输入服务器密码,输入正确后,公钥就会被复制到服务器的~/.ssh/authorized_keys文件中。这一步操作简单,适合大多数用户。如:

方法二:手动复制

若没有ssh-copy-id工具,可手动操作。首先,在客户端使用文本编辑器打开公钥文件id_rsa.pub,复制其全部内容。然后,通过普通的 SSH 登录到服务器。在服务器上,检查~/.ssh文件夹是否存在,如果不存在,使用以下命令创建:​

	mkdir ~/.ssh​

接着,创建或编辑~/.ssh/authorized_keys文件(如果文件不存在则创建),将复制的公钥内容粘贴到该文件末尾,保存并退出。同时,需确保~/.ssh文件夹和authorized_keys文件的权限设置正确,一般~/.ssh权限为 700,authorized_keys权限为 600。可通过以下命令设置:​

	chmod 700 ~/.ssh​
	chmod 600 ~/.ssh/authorized_keys​

这种方法虽然稍显繁琐,但在一些特殊情况下仍很实用。以下是服务器端的截图

连接测试免登录

直接登录成功,如果在生成密钥对时未设置密码的话!

应用场景

自动化脚本

在编写自动化运维脚本时,经常需要在不同服务器之间进行操作。使用 SSH 免登录,脚本可以在无需人工干预输入密码的情况下,自动登录到目标服务器执行命令,实现诸如批量部署软件、更新服务器配置等任务。例如,一个简单的脚本可以遍历一组服务器 IP,依次登录并执行软件更新命令:​

	#!/bin/bash​

	servers=(​
		"192.168.1.10"​
		"192.168.1.11"​
		"192.168.1.12"​
	)​

	for server in "${servers[@]}"​
	do​
	 ssh user@$server "sudo apt update && sudo apt upgrade -y"​
	done​

在这个脚本中,通过 SSH 免登录,脚本可以依次登录到各个服务器,执行软件更新操作,大大提高了运维效率。​

集群管理​

在搭建服务器集群时,主节点需要频繁与各个子节点进行通信和管理操作。通过设置 SSH 免登录,主节点可以方便地登录到子节点进行状态检查、任务分配等操作,提高集群管理的效率和便捷性。例如,在一个大数据处理集群中,主节点需要定期检查各个子节点的资源使用情况,通过 SSH 免登录,主节点可以快速执行检查脚本,及时获取集群状态信息,确保集群稳定运行。

注意事项

虽然 SSH 免登录带来了便利,但也需注意安全问题。首先,要妥善保管私钥,避免私钥泄露。建议为私钥设置一个强密码短语,增加私钥的安全性。强密码短语应包含大小写字母、数字和特殊字符,长度足够。其次,定期检查服务器上authorized_keys文件的内容,确保没有未经授权的公钥被添加。可以通过查看文件修改时间和内容,及时发现异常。此外,服务器端的 SSH 配置文件(通常位于/etc/ssh/sshd_config)中,应合理设置诸如PermitRootLogin(是否允许 root 用户直接登录)、PasswordAuthentication(是否允许密码登录)等参数,以增强服务器的整体安全性。例如,将PermitRootLogin设置为no,禁止 root 用户直接通过 SSH 登录,可有效降低安全风险。


Comment