Linux-shell脚本使用ssh远程执行命令通过密码的方式登录

发布时间 2023-10-19 10:27:59作者: 业余砖家

1. sshpass简介

sshpass 是一个在非交互式 ssh 会话中自动输入密码的工具。它可以直接在命令行中指定密码,因此可以用于 Shell 脚本等自动化场景。在 Red Hat 系统中,可以通过 epel-release 源安装 sshpass。

epel-release 源是 Extra Packages for Enterprise Linux (EPEL) 的缩写,是由 Fedora 社区维护的,为 RHEL 和 CentOS 提供额外的软件包和库。默认情况下,RHEL 和 CentOS 并没有启用 EPEL 源,需要手动进行配置。

2. sshpass安装

sshpass在centos上安装方法

yum install -y epel-release  

yum install -y sshpass

sshpass在ubuntu安装

apt-get  install sshpass

3. sshpass用法

sshpass -p <服务器密码> ssh -tt root@${服务器IP}

例如:  

sshpass -p 123456 ssh -tt root@10.1.1.1

-tt 的意思:

在使用 sshpass 命令调用 ssh 时,通常建议使用 -t 选项来分配为 ssh 命令启动的伪终端。这样可以使远程 shell 在连接关闭后正常终止。如果不使用 -t 选项,可能会导致远程 shell 无法正确退出。

而 -tt 选项是在 -t 的基础上增加了一次远程命令的强制性 tty 分配,它的意思是在远程主机上分配一个强制性的 tty 终端,无论是否需要。其实,-tt 选项是为了解决不同版本的 SSH 之间的兼容性问题而设置的。

对于简单的命令:

如果是简单执行几个命令,则:

sshpass -p <服务器密码> ssh -tt root@${服务器IP}  "cd /home ; ls"

基本能完成常用的对于远程节点的管理了,几个注意的点:

(1) 双引号,必须有。如果不加双引号,第二个ls命令在本地执行

(2) 分号,两个命令之间用分号隔开

对于脚本的方式:

  有些远程执行的命令内容较多,单一命令无法完成,考虑脚本方式实现:

#!/bin/bash

HOST="10.0.0.1"

HOST_PASSWORD=123456

sshpass -p ${HOST_PASSWORD} ssh -tt root@${HOST}  > /dev/null 2>&1 << EOF

cd /tmp

mkdir  abc

touch 1.txt

exit

EOF

echo
"finished"

远程执行的内容在“<< EOF ” 至“ EOF ”之间,在远程机器上的操作就位于其中,注意的点:

(1) << EOF,ssh后直到遇到EOF这样的内容结束,EOF可以随便修改成其他形式。

(2) 重定向目的在于不显示远程的输出了

(3) 在结束前,加exit退出远程节点