linux】ssh 远程执行命令自动输入密码方式 sshpass

一.自动输入密码

场景:

由于多台机必须要登陆执行命令,需要使用密钥一台台登录,所以每次登陆机器的时候都需要手动输入域账号密码。密码太长且复杂,手动输入容易输错,故使用脚本来做这个事情,实现免输入密码登陆,工作效率大大提升!

解决方法:

    使用 expect
    使用 sshpass
    结合 alfred 可以快速一键登录
    也可以使用 electerm 进行登录

对于我自己而言的话,用的最爽的还是使用 sshpass+alfred 一键登录,先安装 sshpass,然后使用命令

sshpass -p 你的密码 ssh -A -g yourname@ip

    1

登录到服务器,然后再执行脚本,部署自己的应用或者博客,登录服务器的命令用 alfred 的 workflow 来执行,方便快捷

后续使用 cicd 来部署,每次提交即可进行部署,不用登录到服务器即可部署.
二.sshpass 方式
1.安装 sshpass

sshpass 是一个实用工具,它提供了一种自动化 SSH 密码认证的方式。它允许你将密码作为命令行参数或通过环境变量传递给 SSH 命令,从而在非交互式方式下进行 SSH 登录。

使用 sshpass 可以方便地批量管理多台服务器,同时也可以将其用于自动化脚本或任务中,从而减少手动输入密码的繁琐。需要注意的是,使用 sshpass 可能会存在一定的安全风险,因此在使用时需要谨慎考虑。

不能使用命令安装,会报错,使用源码安装.

使用方式:

sshpass -p 'password' ssh user@host

    1

其中 -p 参数指定密码,user@host 是要登录的目标服务器地址和用户名。使用上述命令后,sshpass 将会自动完成 SSH 登录过程,而无需手动输入密码。

除了使用命令行参数外,你也可以将密码保存在环境变量中,然后通过 $ENV_VAR 的方式引用它,例如:

export SSHPASS='password'
sshpass -e ssh user@host

    1
    2

其中 -e 参数指示 sshpass 使用环境变量传递密码。在这种方式下,你需要事先将密码保存在 $SSHPASS 环境变量中。

需要注意的是,使用 sshpass 存在一定的安全风险,因为密码会以明文方式传递,容易被恶意程序截获。因此,在使用 sshpass 时,应尽可能避免将密码保存在脚本中,或者将其保存在安全加密的文件中。另外,如果可能的话,建议使用 SSH 公钥认证方式来代替密码认证。
2.源码下载

#源码下载
https://sourceforge.net/projects/sshpass/

    1
    2

3.安装过程

#解压缩

#安装
cd sshpass-1.08

#执行配置文件
./configure

#编译
make

#编译安装
make install

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

4.验证

#查看版本
sshpass -V

#登录服务器
sshpass -p 你的密码 ssh -A -g yourname@ip

    1
    2
    3
    4
    5

三.expect 方式

首先我们创建以一个文本文件,命名为 proxy.expect,内容如下:
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qyj19920704/article/details/128224641

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,有时需要批量远程执行某个脚本或命令,但是需要输入密码才能成功执行。为了方便,可以编写一个脚本来实现批量远程执行并输入密码。 以下是一个简单的实现方法: 1. 创建一个存储远程服务器IP地址和密码的文本文件,例如remote.txt。文件格式为“IP地址:密码”,每行一个服务器的信息,示例内容如下: 192.168.1.101:123456 192.168.1.102:123456 192.168.1.103:123456 2. 编写一个批量执行脚本,例如remote_execute.sh。代码如下: #!/bin/bash while read line do host=$(echo $line | cut -d ":" -f 1) password=$(echo $line | cut -d ":" -f 2) echo "Executing on $host" sshpass -p $password ssh -o StrictHostKeyChecking=no -n $host "command" done<remote.txt 3. 将需要批量执行的命令或脚本替换“command”的位置即可。例如,如果要批量执行一个名为test.sh的脚本,将“command”替换为“./test.sh”。 此脚本使用了sshpass工具来输入远程服务器密码,并使用ssh命令在远程服务器上执行命令。同时,由于使用了-o StrictHostKeyChecking=no参数,可以避免第一次连接时的证书验证问题。 运行这个脚本时,只需要输入“./remote_execute.sh”即可执行。在执行过程中,脚本会依次读取remote.txt中的每个服务器,然后在远程服务器上执行指定的命令或脚本。 需要注意的是,这种方法仅适用于在每个服务器上使用相同的密码。如果密码不同,则需要使用其他方法,例如使用公钥认证来代替密码输入

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值