shell脚本带密码远程登录方法
在写shell脚本的时候会经常遇到需要去另一个服务器上 执行操作,例如连另一个服务器上的Mysql。但是常用的ssh是没有附带密码的,而且又不想创建公钥私钥这种操作。那怎么办呢,可以通过sshpass来解决。
1 sshpass安装方法
sshpass在centos上安装方法:
yum install -y epel-release
yum install -y sshpass
ubuntu安装
apt-get install sshpass
2 用法
sshpass -p <服务器密码> ssh -tt root@${服务器IP}
例如: sshpass -p 123456 ssh -tt root@10.1.1.1
3 具体使用
例如我们想写个脚本到远程服务器的Mysql上去建个新表,怎么做呢?具体看如下的脚本:
#!/bin/bash
set -e
MYSQL_HOST="10.1.2.3"
HOST_PASSWORD=hadoop
MYSQL_USER=test
MYSQL_PASSWORD=root
sshpass -p ${HOST_PASSWORD} ssh -tt root@${MYSQL_HOST} << EOF
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD}
DROP DATABASE IF EXISTS ki_docker;
CREATE DATABASE IF NOT EXISTS ki_docker DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
EOF
echo "finished"
4 如何和远程连接服务断开
以上脚本即可执行完成对远程服务器上的mysql里建个数据库,但是还是最后一句echo "finished"
却无法输出。因为没从远程连接断开,怎么断开呢,只需要加两行,exit
先退出数据库,然后exit 0
断开远程连接,回到现在的执行脚本里继续执行后续的shell命令。
具体如下:
#!/bin/bash
set -e
MYSQL_HOST="10.1.2.32"
HOST_PASSWORD=hadoop
MYSQL_USER=test
MYSQL_PASSWORD=root
sshpass -p ${HOST_PASSWORD} ssh -tt root@${MYSQL_HOST} << EOF
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD}
DROP DATABASE IF EXISTS ki_docker;
CREATE DATABASE IF NOT EXISTS ki_docker DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
exit;
exit 0
EOF
echo "finished"