找回密码
 立即注册
快捷导航

SSH使用密钥免密码登录服务器、免密登录ssh

[复制链接]
男技师 2024-11-27 14:47:46 | 显示全部楼层
本帖最后由 男技师 于 2024-11-27 14:49 编辑

为了简化 SSH 登录过程, 实现从客户机 Client 登录服务机 Upgrade 只需要运行 ssh hostname 即可, 即不需要输入用户名和密码。

免密码登录服务器设置步骤

1. 在客户机生成 SSH 密钥和公钥

假设客户机 Client(192.168.0.104) 和程服务机 Upgrade(148.135.123.140) 拥有相同的用户,名为 root。

Client 客户机执行

ssh-keygen -t rsa
ssh-keygen -t rsa -C "youremail@example.com"                  # 指定名字
ssh-keygen -t rsa -b 4096 -C "root" -f  ~/.ssh/id_rsa         # 指定文件路径
cat ~/.ssh/id_rsa.pub                                         # 查看公钥内容确认一下
ssh-copy-id -p 22 -i  ~/.ssh/id_rsa.pub root@148.135.123.140  # 本地机器使用 ssh-copy-id 增加,或者直接步骤2 人工写入文件
cat ~/.ssh/id_rsa.pub | ssh -p 22 root@148.135.123.140 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

ssh-keygen 常用参数

  • -t:指定密钥的加密演算法,预设使用 SSH2d 的 rsa
  • -f:指定密钥的文件名,使用 rsa 加密时,默认为 id_rsa(私钥 id_rsa,公钥 id_rsa.pub
  • -P:提供旧密码,空表示不需要密码(-P ''
  • -N:提供新密码,空表示不需要密码(-N '')
  • -b:指定密钥长度(bits)
  • -C:提供一个新标签

~/.ssh 目录下四文件及作用

  • authorized_keys: 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
  • known_hosts: 已知的主机公钥清单
  • id_rsa: 生成的私钥文件
  • id_rsa.pub: 生成的公钥文件

2. 将 SSH 公钥上传到远程服务器

通常三种方式,一是通过 ssh-copy-id 命令,二是通过 scp 命令,三是手工复制。

Upgrade 远程服务机执行

su - root                           # 切换当前用户到 root
cat ~/.ssh/known_hosts              # 查看认证文件
cat ~/.ssh/authorized_keys          # 如果不存在就新建,并确保权限
chmod 700 ~/.ssh                    # 确保目录权限 700,文件权限 600
chmod 600 ~/.ssh/authorized_keys
# 可以修改 == 后,加入用户注释标识方便管理
echo ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQC3ew6qUVc7jzyB/kW15QEbfLDSSAIFfslkneU9AfQ89tulTFaIfJlIBpIdb4egO5jJ39FB1jIAvB5WXYPuPc3WAcmzLWXWHjE4JqeqfT8a0veKpqg68d0LZqT+nMOKJ8MoF54zBi/fweA8VHw95Hn6sBgD/WoUqGriuW84MjENxEBTGtPZDgXkveLYvOXXc51A8IvEybjQNRkjJ9450srDETPFesak/mGykqSX1NktnheoJtCJU5eK1JzJz/j4hdbmXrRsmiw5L+EYkz9cQD4tE3cpuQhKuahX1579i8mMuYvqyVPAFrrMJLnQAYTSKWnIr+9jktPLyALVD2u2Df root@client-web >> ~/.ssh/authorized_keys

修改 ssh 配置文件

# 编辑 sshd_config文件
vi /etc/ssh/sshd_config

# 请留意 root 用户能否通过 SSH 登录
# PermitRootLogin yes
# PasswordAuthentication yes

# 禁用密码验证
PasswordAuthentication no
# 启用密钥验证
RSAAuthentication yes
PubkeyAuthentication yes
# 指定公钥数据库文件
AuthorsizedKeysFile .ssh/authorized_keys

sed -i "s/^PasswordAuthentication.*/PasswordAuthentication no/g" /etc/ssh/sshd_config
sed -i "s/^#RSAAuthentication.*/RSAAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#PubkeyAuthentication.*/PubkeyAuthentication yes/g" /etc/ssh/sshd_config
sed -i "s/^#AuthorizedKeysFile.*/AuthorizedKeysFile .ssh\/authorized_keys/g" /etc/ssh/sshd_config

重启 ssh 服务前建议多保留一个会话以防不测

# RHEL/CentOS 系统
service sshd restart
# Ubuntu 系统
service ssh restart
# Debian 系统
/etc/init.d/ssh restart

grep 过滤井号查看配置

# grep 命令 -v 参数(反向选择)分别去掉所有以 #(井号)和 ;(分号)开头的注释信息行,对于剩余的空白行可以再用 ^ $来表示并反选过滤
# ssh 服务端
root@cloudcone-140:~# cat /etc/ssh/sshd_config | grep -v "#" | grep -v ";" | grep -v "^$"
# ssh 客户端
root@cloudcone-140:~# cat /etc/ssh/ssh_config | grep -v "#" | grep -v ";" | grep -v "^$"

3. 客户端免密码登录服务器

现在 Client 客户机可以不用密码登入 Upgrade 远程服务机了。

ssh root@Upgrade_ip_148.135.123.140 -v
ssh root@148.135.123.140 -i ~/.ssh/id_rsa          # 指定私钥,默认条件下使用 ~/.ssh/id_rsa
ssh root@148.135.123.140 -i .ssh/id_rsa -p 22      # 指定端口
# 有问题删除 ~/.ssh/known_hosts 文件内容对应 IP 的行的认证信息,可重新连接认证

免密码登录错误调试

ssh root@148.135.123.140 -v

4. 本地登录SSH小技巧

为了不每次输入 ssh user@hostname -p2022 长串的命令,我们可以在 ~/.ssh/config 中设置服务器别名来快捷登录

vi ~/.ssh/config

Host abc  # 自定义别名
      User root  # 用户名
      Hostname hostname # 服务器地址
      Port 2022    # 端口号
      IdentityFile ~/.ssh/id_ed25519  #本地证书

设置完成后,就可以使用 ssh abc 这样简介的方式来连接服务器了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-12-6 11:37

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表