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

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

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

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

1 sshpass安装方法

sshpass在centos上安装方法

yum install -y epel-release  
yum install -y sshpass

sshpass在ubuntu安装

apt-get  install sshpass

2 用法

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退出远程节点
posted @ 2023-05-17 15:29  买定灬离手  阅读(3772)  评论(0编辑  收藏  举报