Linux和Windows配置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.csdn.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地址
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用 Windows 自带的 PowerShell 来写一个登录 Linux 的脚本。 下面是一个示例脚本: ```powershell # 连接 Linux 主机的 IP 地址 $LinuxHost = "192.168.1.100" # Linux 主机的登录用户名 $Username = "root" # 连接 Linux 主机的端口(默认是 22) $Port = 22 # 建立 SSH 连接 $sshConnection = New-SshConnection -ComputerName $LinuxHost -Username $Username -Port $Port # 连接到 Linux 主机 Connect-SshSession -Connection $sshConnection # 在 Linux 主机上执行命令 Invoke-SshCommand -Session $sshConnection -Command "ls -l" # 断开连接 Disconnect-SshSession -Session $sshConnection ``` 在运行这个脚本之前,你需要安装 Posh-SSH 模块。你可以使用以下命令安装它: ```powershell Install-Module -Name Posh-SSH ``` 如果你想要在脚本中使用密码而不是使用密钥来连接,你可以使用 `-Password` 参数指定密码。 例如: ```powershell $sshConnection = New-SshConnection -ComputerName $LinuxHost -Username $Username -Port $Port -Password "your-password" ``` 希望这个示例能帮到你! ### 回答2: 在Windows系统下,可以使用PowerShell来编写一个SSH登录Linux的脚本。 以下是一个样例脚本,用于使用SSH协议登录Linux远程服务器: ```powershell # 设置要连接的Linux服务器地址、用户名和密码 $serverAddress = "your_server_address" $username = "your_username" $password = "your_password" # 创建SSH会话 $session = New-SSHSession -ComputerName $serverAddress -Credential (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, (ConvertTo-SecureString -String $password -AsPlainText -Force)) # 检查SSH连接是否成功 if ($session) { Write-Host "SSH connection established." # 执行登录后的命令,例如查看当前登录用户的信息 Invoke-SSHCommand -SessionId $session.SessionId -Command "whoami" # 关闭SSH会话 Remove-SSHSession -SessionId $session.SessionId } else { Write-Host "Failed to establish SSH connection." } ``` 请注意,以上脚本的执行需要先安装并引入PowerShell SSH模块,您可以通过在PowerShell终端中运行以下命令来安装: ```powershell Install-Module -Name Posh-SSH ``` 安装完成后,即可运行脚本来实现SSH登录Linux服务器。请将`your_server_address`、`your_username`和`your_password`替换为真实的服务器地址、用户名和密码。 需要注意的是,上述脚本使用PowerShell的SSH模块,如果您习惯使用其他的SSH客户端,也可以根据具体情况选择相应的工具,例如PuTTY或OpenSSH等。 另外,由于题目要求的字数限制,以上仅为一个简单示例脚本,可能并不适用于所有环境,请根据实际需求和服务器配置进行相应的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值