Linux远程登录
一、密码认证
正常登录Linux常用的秘密认证登录方式
BASH
ssh 用户名@IP地址 -p 端口号
随后在后续的对话框中再输入密码,才能正常进入Linux系统
缺点: 每次登录都要输入密码,密码不可见,很容易输入错误
二、公私钥认证免密登录
1. 生成公私钥对
BASH
ssh-keygen -N "" -b 4096 -t rsa -f /root/.ssh/ansible_rsa
输出如下(由于我本地已经生成了公私钥对,重新生成会有是否覆盖提示):
Bash
Generating public/private rsa key pair.
/root/.ssh/ansible_rsa already exists.
Overwrite (y/n)? y
Your identification has been saved in /root/.ssh/ansible_rsa.
Your public key has been saved in /root/.ssh/ansible_rsa.pub.
The key fingerprint is:
SHA256:uDu3wsz4yVlRGqITo12ft2Kizbz5Qtg0MIeO+lZ3W2M root@192-168-158-100-RedHat-7
The key's randomart image is:
+---[RSA 4096]----+
| . |
| + . |
| oo+o . . |
| .o.=o+ = |
| .. ++..S . |
|. o.+..oE. |
| . . Bo.++.. |
| o .*BOo. |
| . ..%Bo. |
+----[SHA256]-----+
查看/root/.ssh目录,可以看到如下两个文件:
[root@192-168-158-100-RedHat-7 .ssh]# ll
total 16
-rw-r--r-- 1 root root 3243 Jan 26 17:37 ansible_rsa
-rw-r--r-- 1 root root 754 Jan 26 17:37 ansible_rsa.pub
- ansible_rsa: 私钥,保密,不分享
- ansible_ras.pub:公钥,上传到Linux平台
2. 把公钥传到 Linux(两种方法)
方法A:一键上传(推荐)
powershell
ssh-copy-id 用户名@LinuxIP
# 例:ssh-copy-id root@172.16.158.100
输入一次 Linux 密码,自动追加到 ~/.ssh/authorized_keys。
方法B:手动复制
- 查看公钥内容:
powershell
type $env:USERPROFILE\.ssh\ansible_ras.pub
复制整行 (以 ssh-ed25519 AAAAC3Nza... 开头)
- 登录 Linux,创建/写入授权文件:
bash
# 登录
ssh 用户名@LinuxIP
# 新建 .ssh 目录并设权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 写入公钥(粘贴刚才复制的整行)
nano ~/.ssh/authorized_keys
# 粘贴后:Ctrl+O → 回车 → Ctrl+X
# 关键权限!否则免密失败
chmod 600 ~/.ssh/authorized_keys
3. Linux 端确认 SSH 配置
bash
sudo vi /etc/ssh/sshd_config
确保有:
ini
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# PasswordAuthentication no # 可选:禁用密码登录(安全)
重启 SSH:
bash
# Ubuntu/Debian
sudo systemctl restart ssh
# CentOS/RHEL
sudo systemctl restart sshd
4. 测试免密(Windows PowerShell)
powershell
ssh 用户名@LinuxIP
直接登录,不提示密码 → 成功
三、常见坑(免密仍要密码)
- Linux 权限不对(最常见)
bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
authorized_keys有空行/换行/多空格 → 重新粘贴一整行;sshd_config没开PubkeyAuthentication yes→ 改完重启 sshd;- 防火墙/安全组拦截 22 端口 → 放行。