Linux ssh 免密码登入远程服务器

本文详细介绍如何在两台Linux主机之间配置SSH免密登录,包括在本地主机生成公钥和私钥、设置远程主机的.ssh目录权限、将公钥复制到远程主机并配置authorized_keys文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A为本地主机(即用于控制其他主机的机器) ;
B为远程主机(即被控制的机器Server), 假如ip为172.24.253.2 ;
A和B的系统都是Linux
在A上的命令:
# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
# ssh root@172.24.253.2 "mkdir .ssh;chmod 0700 .ssh" (需要输入密码, 注:必须将.ssh的权限设为700)
# scp ~/.ssh/id_rsa.pub root@172.24.253.2:.ssh/id_rsa.pub (需要输入密码)
在B上的命令:
# touch /root/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
# chmod 600 ~/.ssh/authorized_keys (# 注意: 必须将~/.ssh/authorized_keys的权限改为600, 该文件用于保存ssh客户端生成的公钥,可以修改服务器的ssh服务端配置文件/etc/ssh/sshd_config来指定其他文件名)
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (将id_rsa.pub的内容追加到 authorized_keys 中, 注意不要用 > ,否则会清空原有的内容,使其他人无法使用原有的密钥登录)
回到A机器:
# ssh root@172.24.253.2 (不需要密码, 登录成功)
假如在生成密钥对的时候指定了其他文件名(或者需要控制N台机器,此时你会生成多对密钥),则需要使用参数-i指定私钥文件
# ssh root@172.24.253.2 -i /path/to/your_id_rsa
scp也是一样,如:
scp -i /root/.ssh/id_rsa ./xxx 192.168.102.158:/home/wwy/bak
因为默认情况下ssh命令会使用~/.ssh/id_rsa作为私钥文件进行登录,如果需要连接多台服务器而又不希望每次使用ssh命令时指定私钥文件,可以在ssh的客户端全局配置文件/etc/ssh/ssh_config(或本地配置文件~/.ssh/config, 如果该文件不存在则建立一份)中增加如下配置
IdentityFile /path/to/your_id_rsa.
也可以为每个服务器指定一个Host配置:
Host 172.24.253.2
IdentityFile /path/to/your_id_rsa
如果连接时出现如下的错误:
Agent admitted failure to sign using the key
则使用 ssh-add 指令將私鑰 加進來 (根据个人的密匙命名不同更改 id_rsa)
ssh-add ~/.ssh/id_rsa

<think>我们被要求配置SSH免密录,并且以root用户身份录。但是,根据引用[1],生产环境中不建议使用root账号免密录,因为存在安全风险。然而,如果用户坚持要这样做,我们可以提供步骤。 注意:以下步骤需要谨慎操作,因为允许root用户通过SSH免密录会降低系统的安全性。 步骤: 1. 在客户端生成SSH密钥对(如果已有,可跳过) 2. 将客户端的公钥复制到目标服务器的root用户的authorized_keys文件中 3. 确保目标服务器SSH服务配置允许root用户录(默认可能不允许)以及允许公钥认证 4. 测试免密录 详细步骤: 1. 在客户端生成SSH密钥对(在客户端机器上操作,以root用户或能切换到root的用户身份): 如果还没有密钥对,可以使用以下命令生成: ``` ssh-keygen -t rsa ``` 通常,按回车接受默认设置(密钥保存在/root/.ssh/id_rsa,不设置密码),这样在录时就不需要输密钥密码。 2. 将公钥复制到目标服务器(这里目标服务器也是本机?还是另一台?假设目标服务器IP为192.168.31.142): 使用`ssh-copy-id`命令: ``` ssh-copy-id root@192.168.31.142 ``` 然后输目标服务器root用户的密码,这样公钥就会被复制到目标服务器的/root/.ssh/authorized_keys文件中。 如果没有ssh-copy-id,也可以手动操作: ``` cat ~/.ssh/id_rsa.pub | ssh root@192.168.31.142 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" ``` 3. 配置目标服务器SSH服务以允许root录(在目标服务器上操作): 编辑SSH服务配置文件:`/etc/ssh/sshd_config` 确保以下配置: ``` PermitRootLogin yes PubkeyAuthentication yes PasswordAuthentication no # 可选,禁用密码录以提高安全性(但确保免密录成功后再禁用,否则可能锁死) ``` 然后重启SSH服务: ``` systemctl restart sshd ``` 注意:如果目标服务器是云服务器,确保在重启sshd之前,已经通过其他方式(例如控制台)可以访问,以免配置错误导致无法录。 4. 测试免密录: 在客户端执行: ``` ssh root@192.168.31.142 ``` 应该可以直接录,不需要输密码。 安全提醒: - 允许root用户远程录存在安全风险,尤其是免密录。如果私钥泄露,攻击者可以直接录系统。 - 建议使用普通用户录,然后通过sudo提权。如果必须使用root,请确保私钥的安全。 根据引用[1]和[2]的建议,我们通常创建一个专用用户进行免密录,并赋予sudo权限(无需密码)来执行管理员命令。这样即使该用户被泄露,也可以通过sudoers文件限制可执行的命令。 但是,用户明确要求以root用户身份免密录,所以上述步骤是针对root用户的。 如果用户是在同一台机器上配置本机免密录自己(例如在脚本中使用),那么目标服务器就是本机,步骤相同,只需将IP改为127.0.0.1或主机名。 注意:如果目标服务器上root用户的家目录下没有.ssh目录,或者authorized_keys文件的权限不对(应该为600),可能会导致失败。所以确保: - /root/.ssh 目录权限为700 - /root/.ssh/authorized_keys 文件权限为600 引用说明: 引用[1]提到创建专用用户并赋予root权限的方法,但用户要求使用root,所以我们没有采用。 引用[2]介绍了SSH互信的基本步骤。 引用[3]展示了使用ssh-copy-id上传公钥的方法。 因此,我们按照用户要求给出了root用户的免密录配置步骤。 相关问题: 1. 如何为普通用户配置SSH免密录? 2. 配置SSH免密录后仍然需要输密码,如何排查? 3. 如何禁用SSH的密码录以提高安全性?</think>### Linux 配置SSH免密录(以root用户身份) #### 步骤说明 1. **生成SSH密钥对(客户端)** 在需要录的客户端机器上执行: ```bash ssh-keygen -t rsa -b 4096 ``` 连续按回车接受默认设置(密钥保存路径为`$HOME/.ssh/id_rsa`,不设置密码短语),生成密钥对。 2. **复制公钥到目标服务器** 使用以下命令将公钥上传到目标服务器(替换`目标IP`): ```bash ssh-copy-id root@目标IP ``` 输目标服务器的root密码后,公钥会自动添加到`/root/.ssh/authorized_keys`文件中[^3]。 3. **修改SSH服务配置(目标服务器)** 在目标服务器上编辑配置文件: ```bash vi /etc/ssh/sshd_config ``` 确保以下配置生效: ```ini PermitRootLogin yes # 允许root录 PubkeyAuthentication yes # 启用密钥认证 PasswordAuthentication no # 关闭密码认证(可选,增强安全) ``` 保存后重启SSH服务: ```bash systemctl restart sshd ``` 4. **测试免密录** 从客户端执行: ```bash ssh root@目标IP ``` 成功录则无需输密码[^2]。 #### 关键权限检查 - 目标服务器文件权限要求: ```bash chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys ``` - 客户端私钥权限: ```bash chmod 600 ~/.ssh/id_rsa ``` #### 安全风险提示 1. **root用户风险** 直接使用root免密录存在高危安全风险(如私钥泄露导致系统完全失控)[^1]。 2. **安全替代方案** ```bash # 创建专用用户 useradd -m -s /bin/bash adminuser passwd adminuser # 设置密码 # 赋予sudo权限(无需密码) echo "adminuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers # 为该用户配置SSH免密ssh-copy-id adminuser@目标IP ``` > ⚠️ **生产环境强烈建议**:使用普通用户免密录后通过`sudo`提权,避免直接暴露root账户[^1]。 --- ### 相关问题 1. 如何排查SSH免密录失败的问题? 2. 禁用SSH密码录后如何确保不会锁死服务器? 3. SSH密钥认证相比密码认证有哪些安全优势? [^1]: Linux配置ssh免密。配置ssh免密录可以直接使用root用户,但是在生产环境中,不建议使用root账号免密录。 [^2]: Linux 配置SSH免密录(SSH互信)。只需三步:服务端配置允许密钥认证,客户端生成密钥,上传公钥到服务端。 [^3]: linux 配置ssh免密录。公钥上传到目标服务器后,需测试免密录是否生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值