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"
基本能完成常用的对于远程节点的管理了,几个注意的点:
- 双引号,必须有。如果不加双引号,第二个ls命令在本地执行
- 分号,两个命令之间用分号隔开
对于脚本的方式:
有些远程执行的命令内容较多,单一命令无法完成,考虑脚本方式实现:
#!/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 ”之间,在远程机器上的操作就位于其中,注意的点:
- << EOF,ssh后直到遇到EOF这样的内容结束,EOF可以随便修改成其他形式。
- 重定向目的在于不显示远程的输出了
- 在结束前,加exit退出远程节点