通常我们在终端上可以直接执行命令,实现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,如果不对应修改的话,可能无法实现文件或文件夹创建、修改等命令。最后退出远程连接的时候,建议将环境变量还原(不还原也行,系统会自动处理)。