SSH免密脚本

工具教程1周前更新 hank
18 0

这里分享一下SSH免密脚本,主要还是通过sshpass来实现的。

文件大概就是两个,一个用于执行脚本的sshpass.sh,一个则是存放IP、端口、用户名、密码的properties文本。

首先是 sshpass.sh脚本。

# 加载操作系统环境
source /etc/profile

# 统一使用英文的UTF-8字符集
export LANG=en_US.UTF-8

# 设置本地 SSH 密钥文件路径
LOCAL_SSH_PUBLIC_KEY=~/.ssh/id_ed25519.pub

function keyless_configuration(){
    # 检查 Ed25519 公钥是否存在,不存在则生成
    if [ ! -f "$LOCAL_SSH_PUBLIC_KEY" ]; then
        ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
    fi

    # 使用 while read 循环读取服务器配置
    while IFS= read -r line; do
        # 跳过空行
        [ -z "$line" ] && continue

        # 解析服务器信息(IP|端口|用户|密码)
        ip=$(echo "$line" | awk -F '|' '{print $1}')
        port=$(echo "$line" | awk -F '|' '{print $2}')
        user=$(echo "$line" | awk -F '|' '{print $3}')
        password=$(echo "$line" | awk -F '|' '{print $4}')

        # 自动分发公钥到远程服务器(处理含特殊字符的密码)
        sshpass -p"$password" ssh-copy-id -p "$port" -o StrictHostKeyChecking=no "$user@$ip"
    done < ./sshpass.properties
}

function main(){
    keyless_configuration
}

# 执行主函数
main

这里生成的密钥类型是ed25519,没有指定的话默认是rsa。需要注意的是ssh.properties需要放在和脚本路径的同级目录下

sshpass.properties

192.168.1.1|22|root|password

执行完成后,目标服务器上的~/.ssh/authorized_keys就会生成发起免密登录的主机的公钥信息,即自身的id_ed25519.public
SSH免密脚本
SSH免密脚本
脚本执行后,下次ssh可以实现免密登录到远程主机了。

© 版权声明

相关文章