Linux中设置SSH免密码(密钥)登录的具体步骤

 更新时间:2025年07月16日 10:55:13   作者:彬彬侠  
SSH是一种加密的网络协议,广泛用于远程管理服务器和安全传输文件,通常在使用SSH时需要输入密码进行验证,但通过配置免密登录,我们可以省去每次输入密码的麻烦,所以本文给大家介绍了Linux中设置SSH免密码(密钥)登录的具体步骤,需要的朋友可以参考下

1. 基本原理

SSH 免密码登录通过公钥认证实现:

  • 在客户端生成一对密钥(公钥和私钥)。
  • 将公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。
  • 客户端使用私钥登录,无需输入密码。

2. 具体步骤

2.1 在客户端生成 SSH 密钥对

检查是否已有密钥
在客户端(你的本地机器或跳板机)上,检查是否已有 SSH 密钥:

ls -l ~/.ssh/

如果存在 id_rsa(私钥)和 id_rsa.pub(公钥),可以跳到步骤 2.2。

生成密钥对
使用 ssh-keygen 生成 RSA 或 ED25519 密钥(推荐 ED25519,安全性更高):

ssh-keygen -t ed25519 -C "your_email@example.com"

或使用 RSA(旧系统可能不支持 ED25519):

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 按 Enter 接受默认文件路径(~/.ssh/id_ed25519~/.ssh/id_rsa)。
  • 可设置密码保护私钥(为空则无密码,推荐为空以实现完全免密)。
  • 执行后会生成:
    • ~/.ssh/id_ed25519~/.ssh/id_rsa(私钥)
    • ~/.ssh/id_ed25519.pub~/.ssh/id_rsa.pub(公钥)

2.2 将公钥复制到目标服务器

将客户端的公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。

使用 ssh-copy-id(推荐,简单)

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
  • 替换 user 为目标服务器的用户名,remote_host 为服务器 IP 或域名。
  • 输入目标服务器密码,公钥会自动添加到 ~/.ssh/authorized_keys

手动复制(如果 ssh-copy-id 不可用)

  • 在客户端查看公钥内容:
cat ~/.ssh/id_ed25519.pub
  • 复制输出内容(类似 ssh-ed25519 AAAAC3... your_email@example.com)。
  • 登录目标服务器,编辑 authorized_keys
ssh user@remote_host
mkdir -p ~/.ssh
echo "your_public_key" >> ~/.ssh/authorized_keys
  • 确保权限正确:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2.3 测试免密码登录

在客户端尝试登录:

ssh user@remote_host

如果配置正确,将无需输入密码直接登录。

2.4 (可选)配置 SSH 客户端

为方便管理,可以在客户端的 ~/.ssh/config 文件中添加配置:

# 编辑配置文件
nano ~/.ssh/config

添加以下内容:

Host alias_name
    HostName remote_host
    User user
    IdentityFile ~/.ssh/id_ed25519
  • alias_name:自定义别名,如 myserver
  • 保存后,使用 ssh alias_name 即可登录。

3. 防火墙与 SSH 配置

确保目标服务器的防火墙允许 SSH 连接(默认端口 22):

使用 firewalld

sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload

使用 iptables

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables-save > /etc/sysconfig/iptables

使用 ufw(Ubuntu):

sudo ufw allow ssh

4. 常见问题排查

无法免密登录

检查服务器端 SSH 配置(/etc/ssh/sshd_config):

sudo nano /etc/ssh/sshd_config

确保以下配置启用:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

重启 SSH 服务:

sudo systemctl restart sshd

检查 ~/.ssh/authorized_keys 文件权限(必须为 600):

ls -l ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

检查客户端私钥权限:

chmod 600 ~/.ssh/id_ed25519

SELinux 限制(CentOS/RHEL)
如果 SELinux 启用,可能阻止 SSH 登录:

sudo setsebool -P ssh_keysign on
sudo restorecon -R -v ~/.ssh

连接被拒绝

  • 确认服务器 SSH 服务运行:
sudo systemctl status sshd
  • 检查防火墙是否开放 22 端口:
sudo firewall-cmd --list-ports
  • 测试端口连通性:
nc -zv remote_host 22

公钥格式错误
确保公钥是一行完整内容,复制时不要引入换行符。

5. AI 开发相关场景

在 AI 开发中,免密码登录常用于:

  • 远程访问 GPU 服务器:配置 Jupyter Notebook 或 TensorFlow Serving 的远程访问。
  • 自动化脚本:如批量部署模型训练任务,需在多台机器间免密传输文件(scprsync)。
  • Docker 集群:在多节点集群中配置 SSH 免密登录以便管理。

示例:在客户端配置 scp 免密传输:

scp dataset.tar.gz user@remote_host:/path/to/destination

6. 安全注意事项

  • 保护私钥:不要泄露 ~/.ssh/id_rsa~/.ssh/id_ed25519,确保文件权限为 600。

限制公钥访问:在 authorized_keys 中可添加限制,如:

from="192.168.1.100" ssh-ed25519 AAAAC3... your_email@example.com

仅允许特定 IP 使用该公钥登录。

禁用密码登录:为提高安全性,可在 /etc/ssh/sshd_config 中设置:

PasswordAuthentication no

然后重启 sshd

sudo systemctl restart sshd

以上就是Linux中设置SSH免密码(密钥)登录的具体步骤的详细内容,更多关于Linux SSH免密码登录的资料请关注脚本之家其它相关文章!

相关文章

  • Centos7 利用LVM实现动态扩容的方法

    Centos7 利用LVM实现动态扩容的方法

    本篇文章主要介绍了Centos 7 利用LVM实现动态扩容的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • linux缩减XFS分区格式的根目录

    linux缩减XFS分区格式的根目录

    大家好,本篇文章主要分享的是linux缩减XFS分区格式的根目录,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • CentOS6.5下Redis安装与配置详细步骤

    CentOS6.5下Redis安装与配置详细步骤

    本篇文章主要介绍了CentOS6.5下Redis安装与配置详细步骤,详细介绍redis单机单实例安装与配置,服务及开机自启动。有兴趣的可以了解一下。
    2017-02-02
  • 在 Linux 命令行中使用 tcpdump 抓包的一些功能

    在 Linux 命令行中使用 tcpdump 抓包的一些功能

    tcpdump 是一款灵活、功能强大的抓包工具,能有效地帮助排查网络故障问题。接下来通过本文给大家介绍在 Linux 命令行中使用 tcpdump 抓包的一些常用功能,需要的朋友参考下吧
    2018-11-11
  • 在Linux 命令行终端分屏的两种工具

    在Linux 命令行终端分屏的两种工具

    这篇文章主要介绍了在Linux 命令行终端分屏的两种工具,这两种工具分别是screen和tmux,本文逐一给大家介绍,需要的朋友可以参考下
    2018-09-09
  • linux下vsftpd的安装及配置使用详细步骤(推荐)

    linux下vsftpd的安装及配置使用详细步骤(推荐)

    这篇文章主要介绍了linux下vsftpd的安装及配置使用详细步骤 ,需要的朋友可以参考下
    2018-01-01
  • Linux下安装或升级Python 2.7的操作方法

    Linux下安装或升级Python 2.7的操作方法

    下面小编就为大家带来一篇Linux下安装或升级Python 2.7的操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 对Linux终端使用socks5代理的方法详解

    对Linux终端使用socks5代理的方法详解

    今天小编就为大家分享一篇对Linux终端使用socks5代理的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • linux中ssh免密通信的实现

    linux中ssh免密通信的实现

    这篇文章主要介绍了linux中ssh免密通信的实现,详细的介绍了什么是ssh及其ssh免密通信,非常具有实用价值,需要的朋友可以参考下
    2018-11-11
  • Linux的路由表详细介绍

    Linux的路由表详细介绍

    这篇文章主要介绍了Linux的路由表详细介绍的相关资料,希望通过本文大家能彻底了解Linux 路由表的知识,需要的朋友可以参考下
    2017-08-08

最新评论