一、手动配置SSH免密登录
1、生成公钥和私钥:在需要进行免密登录的客户端和服务器端都执行以下命令生成SSH密钥对,以root用户为例,在终端输入:
sshkeygen t rsa
按提示操作,可直接按三次回车键接受默认设置,包括保存路径(默认为~/.ssh/id_rsa
)和不设置密码短语等。
执行完成后,会在~/.ssh
目录下生成id_rsa
(私钥)和id_rsa.pub
(公钥)两个文件。
2、拷贝公钥到远程服务器:使用sshcopyid
命令将本地的公钥拷贝到远程服务器上,要将本机的公钥拷贝到IP地址为192.168.1.100
的远程服务器的root用户下,执行:
sshcopyid root@192.168.1.100
系统会提示输入远程服务器用户的密码,输入正确的密码后,公钥就会被追加到远程服务器的~/.ssh/authorized_keys
文件中。
如果远程服务器没有sshcopyid
命令,也可以手动执行以下命令来完成相同的操作:
ssh root@192.168.1.100 "mkdir p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
3、测试免密登录:在客户端尝试通过SSH登录到远程服务器,如果配置正确,应该能够无需密码直接登录。
ssh root@192.168.1.100
首次登录时可能会提示是否信任该远程主机的密钥指纹,输入yes
并回车确认即可。
二、自动配置(脚本配置)SSH免密登录
1、安装Expect工具:在CentOS系统中,可以使用以下命令安装Expect工具,它用于自动化交互式任务:
yum y install expect
2、编写脚本:创建一个名为auto_ssh_setup.sh
的脚本文件,内容如下:
#!/bin/bash 定义变量 USER="root" PASSWORD="your_password" SERVERS=("192.168.1.100" "192.168.1.101" "192.168.1.102") 生成SSH密钥对 sshkeygen t rsa N "" f ~/.ssh/id_rsa << EOF $PASSWORD $PASSWORD EOF 将公钥复制到所有服务器 for SERVER in "${SERVERS[@]}"; do expect c " set timeout 1; spawn sshcopyid i ~/.ssh/id_rsa.pub $USER@$SERVER; expect { \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\r\"; exp_continue; } \"$USER@$SERVER's password:\" { send \"$PASSWORD\r\"; } } " done
请将上述脚本中的your_password
替换为实际的登录密码,SERVERS
数组中的IP地址替换为实际的服务器IP地址。
3、赋予脚本执行权限并运行脚本:给脚本文件赋予可执行权限,然后运行脚本:
chmod +x auto_ssh_setup.sh
./auto_ssh_setup.sh
脚本会自动完成SSH密钥对的生成和公钥的复制,实现免密登录。
三、注意事项
1、权限问题:确保~/.ssh
目录及其中的文件具有正确的权限。~/.ssh
目录的权限应设置为700
,authorized_keys
文件的权限应设置为600
,否则可能会导致免密登录失败。
2、防火墙设置:检查服务器的防火墙设置,确保允许SSH连接(默认端口是22),如果防火墙阻止了SSH连接,需要开放相应的端口。
3、安全性考虑:虽然SSH免密登录可以提高便利性,但为了安全起见,建议对私钥进行加密保护,并在不需要使用时妥善保管私钥文件,避免泄露导致安全问题。
四、FAQs
1、Q:如果在执行sshcopyid
命令时出现“Permission denied (publickey)”错误,该怎么办?
A:这可能是由于以下几个原因导致的:
没有正确生成或拷贝SSH密钥,请确保在客户端和服务器上都正确执行了sshkeygen
命令生成密钥对,并且在拷贝公钥时没有出错。
服务器上的~/.ssh/authorized_keys
文件权限不正确,请检查该文件的权限是否为600
,以及~/.ssh
目录的权限是否为700
。
可能存在网络问题或服务器配置问题,导致无法正常连接服务器,可以检查网络连接是否正常,以及服务器的SSH服务是否正常运行,配置文件是否正确等。
2、Q:如何删除已经配置好的SSH免密登录?
A:如果要删除某个服务器上的SSH免密登录,可以在该服务器上找到~/.ssh/authorized_keys
文件,打开该文件并删除对应的公钥行即可,如果是要删除所有服务器上的免密登录配置,可以在客户端删除本地的私钥文件~/.ssh/id_rsa
和公钥文件~/.ssh/id_rsa.pub
,然后重新生成新的SSH密钥对并进行配置。