通常我们在终端上可以直接执行命令,实现Linux系统的远程登录和执行相关操作等。但有时候机器比较多而且执行的命令都比较相似的时候,直接在终端上操作的方法就显得比较繁琐,此时可以考虑使用Shell脚本。
需要的软件:openssh,sshpass
一、远程连接
使用远程登录的方法包括远程登录服务器的搭建网上有很多教程,这里不再赘述,个人推荐使用openssh软件,这里可以简单说一下使用方法,一般
ssh username@IP
username是远程登录的用户名,IP是远程登录的机器的IP地址。一般使用该命令的时候是需要输入密码的,这个时候就存在终端与用户交互的问题,对于写Shell脚本的来说不是一件好事。为了解决这个问题,有人提议使用免密登录的方法,参考评论区1,参考评论区2,但是这样很不安全。还有一种方式是带密码登录的方法,使用expect,或者sshpass的方法,个人推荐使用sshpass,值得一提的是,若无管理员权限安装sshpass的时候,需要在./configure 后增加
--prefix=yoursshpassPath指定安装位置,然后在bashrc里配置一下。sshpass基本用法,
sshpass -p yourpassword ssh username@IP
二、远程执行命令
参考这篇博文的做法,
#!/bin/bash
ssh user@remoteNode > /dev/null 2>&1 << eeooff
cd /home
touch abcdefg.txt
exit
eeooff
echo done!
不过我们需要在此基础上进行修改。
#!/bin/bash
OriginHOME=$HOME #存储原始环境变量
export HOME=/home/remoteusername #提前修改环境变量
sshpass -p yourpassword ssh username@IP -tt > /dev/null 2>&1 << remotessh #远程登录
cd $HOME
touch example.txt #远程创建文件
mkdir -pv test/test1/test2 #远程创建文件夹
echo "hello world!" >> $HOME/example.txt #远程写入文件
exit #退出远程账户
remotessh #退出远程连接
export HOME=$OriginHOME #还原环境变量
需要特别注意的是,使用远程连接时候是需要提前修改环境变量的,例如$HOME,如果不对应修改的话,可能无法实现文件或文件夹创建、修改等命令。最后退出远程连接的时候,建议将环境变量还原(不还原也行,系统会自动处理)。