欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在Linux和Windows上设置无密码SSH登录?

最编程 2024-08-03 14:19:10
...

Linux和Windows配置ssh免密码登录

    • 生成ssh密钥对
      • ssh-keygen常用参数
      • 交互式生成ssh密钥对
      • 非交互式生成密钥对
        • 通过私钥生成公钥(非必需执行)
      • 修改公钥文件的注释信息
      • 通过私钥生成公钥
    • ssh免密登陆原理
    • 为Linux配置ssh免密码登录
      • 非22端口的解决办法
      • 方法2:ssh_config配置ssh免密登录
    • Windows10免密码ssh登录Linux
      • 方法2:使用powershell命令配置ssh免密
    • 使用 ssh-agent 来存储私钥密码
    • 使用sshpass非交互登录ssh--不推荐
      • 安装sshpass
      • 使用sshpass非交互式ssh登录

生成ssh密钥对

RSA算法实现过程
在这里插入图片描述


ssh-keygen常用参数

https://www.itbiancheng.com/article/5236.html

## -m PEM =将密钥文件格式设为PEM
## -t rsa =指定密钥类型为RSA格式
## -b 4096 =指定密钥的位数为4096
## -C “qiaofei@myserver” 私钥的注释信息,默认是用户名@服务器名
## -f `~/.ssh/mykeys/myprivatekey` =指定私钥文件的文件名
## -N 密码 =指定私钥文件的密码
ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myprivatekey \
    -N mypassphrase

交互式生成ssh密钥对

# 交互式生成密钥对

## 第一次提示:密钥对文件保存路径,直接敲回车
## 第二次提示:是否给密钥文件设置密码,(一般不设置)直接敲回车
## 第三次提示:输入注释域信息,注释域默认初始化为"user@host",以后可以用 -C 选项修改。
ssh-keygen

在这里插入图片描述


非交互式生成密钥对

ssh-client机器上执行

# 非交互式生成密钥对
## -f 指定私钥文件的文件名
## -C 私钥的注释信息,默认是用户名@服务器名
ssh-keygen -f ~/.ssh/id_rsa -C '注释信息'

通过私钥生成公钥(非必需执行)

ssh-client机器上执行。
适用于公钥文件丢失的情况下。

# 通过私钥生成公钥
ssh-keygen -y -f 私钥

修改公钥文件的注释信息

原公钥文件注释信息
在这里插入图片描述

# 修改公钥的注释信息
## -c 要求修改私钥和公钥文件中的注释。本选项只支持 RSA1 密钥。
## -C 指定注释
## -f 指定私钥文件
ssh-keygen -c -C "新注释信息" -f id_rsa

修改后的注释信息
在这里插入图片描述


通过私钥生成公钥

# 通过私钥生成公钥
ssh-keygen -y -f id_rsa > id_rsa.pub

ssh免密登陆原理

https://blog.****.net/omaidb/article/details/120027990

ssh-client公钥内容保存到服务器上的authorized_keys(授权文件)中,客户端可实现免密登录.
服务器上的authorized_keys(授权文件)权限必须是600或者400

# 将指定的客户端添加为免密登陆
echo "ssh-client的公钥信息" >> /root/.ssh/authorized_keys

在这里插入图片描述


为Linux配置ssh免密码登录

ssh客户端执行

# 创建密钥对
ssh-keygen –t rsa –C "注释"
 
# 将本地的公钥传输到被管理节点
ssh-copy-id root@ssh-host-ip

~/.ssh 目录权限是700

# 查看~/.ssh目录的权限
stat -c%a .ssh

# 设置~/.ssh目录权限
chmod 700 ~/.ssh

# 如果还是不能免密登录,需要在B机执行
chmod g-w $HOME

# 如果需要A和B互相免密登录,需要互相分发密钥

非22端口的解决办法

有些服务器的sshd服务配置了其他端口,而不是22端口。

# -p 指定ssh端口号
ssh-copy-id -p 58422 root@192.168.1.10

# 登陆
ssh 用户名@服务器地址 -p 端口号

方法2:ssh_config配置ssh免密登录

ssh_config配置是持久化配置文件。

# 方法2,为该服务器单独配置
vim ~/.ssh/config

# 加上内容:
Host node1
	user admin
	Hostname 1.2.3.4
	Port 2222
	# 指定私钥
	identityfile ~/.ssh/id_rsa

# 登录node1
ssh node1

Windows10免密码ssh登录Linux

Windows7及以下版本使用putty客户端或cmder终端;
Windows10及以上版本直接使用cmd可以使用ssh

# 创建密钥对
ssh-keygen –t rsa –C "注释"

# 安装ssh-copy-id
choco install ssh-copy-id -y

# 上传私钥到ssh-host
ssh-copy-id 用户名@主机ip

# 登录ssh
ssh 用户名@主机ip

方法2:使用powershell命令配置ssh免密

 # 使用powershell上传公钥到ssh-host
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@192.168.2.244 "cat >> .ssh/authorized_keys"

使用 ssh-agent 来存储私钥密码

https://learn.microsoft.com/zh-cn/azure/virtual-machines/linux/create-ssh-keys-detailed#use-ssh-agent-to-store-your-private-key-passphrase

ssh-agent 来缓存私钥文件密码

# 验证ssh-agent处于工作状态
eval "$(ssh-agent -s)"

在这里插入图片描述

# 私钥添加到ssh-agent缓存中
ssh-add ~/.ssh/id_rsa

使用sshpass非交互登录ssh–不推荐

用于非交互的ssh 密码验证

参考地址 https://www.linuxcool.com/sshpass


安装sshpass

# 安装epel源
yum install -y epel-release

# 安装sshpass
yum install -y sshpass

# 查看sshpass版本
sshpass -V

使用sshpass非交互式ssh登录

# 使用sshpass传递密码
sshpass -p 密码 ssh root@ip地址