使用sshpass批量传递密钥实现ssh免密登录

时间:2022-10-26 11:45:51

sshpass介绍

sshpass:用于非交互的ssh 密码验证
使用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取
1、从命令行方式传递密码
sshpass -p user_password ssh user_name@192.168.1.2 【登录远程机器】
sshpass -p user_password scp -P22 root@192.168.1.2:/home/test ./ 【远程机器/home/test 复制到本机当前目录】
还可以加参数 -q 【去掉进度显示】

2、从文件读取密码
echo "user_password" > user.passwd
sshpass -f user.passwd ssh user_name@192.168.1.2

3、从环境变量获取密码
export SSHPASS="user_password"
sshpass -e ssh user_name@192.168.1.2

4、sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@192.168.1.2
-o StrictHostKeyChecking=no 表示远程连接时不提示是否输入yes/no】

5、使用sshpass远程免密,在远程主机上执行shell命令,如下远程执行命令:touch /opt/file.txt
sshpass -p user_password ssh -o StrictHostKeyChecking=no user_name@192.168.1.2 touch /opt/file.txt
[注:shell命令要和sshpass命令写在一行]

6、sshpass远程ssh到目标机器执行命令:
sshpass -p密码 ssh -o StrictHostKeyChecking=no 用户@IP "cmd"
一般若是提示命令未找到,大概原因是使用了命令的别名,如:ll 得换成 ls -l

注:此命令尽量不要再生产环境下使用,因为可以在ps中看见密码。

生成ssh私钥

ssh-keygen -t rsa

使用sshpass批量传递密钥实现ssh免密登录

通过脚本传递私钥

使用sshpass批量传递密钥实现ssh免密登录

cat sshpass.sh

for IP in {201,202,101,102,171,172,173,203,204,205,111,112}
do
sshpass -p redhat ssh-copy-id -o StrictHostKeyChecking=no -f 192.168.28.$IP
ssh 192.168.28.$IP yum install python3 -y
ssh 192.168.28.$IP ln -snf /usr/bin/python3 /usr/bin/python
done

批量传送密钥,并安装python3,修改默认python为3