![使用 ssh 和 Expect 脚本对远程服务器上的文件进行计数](https://linux22.com/image/31672/%E4%BD%BF%E7%94%A8%20ssh%20%E5%92%8C%20Expect%20%E8%84%9A%E6%9C%AC%E5%AF%B9%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%E8%AE%A1%E6%95%B0.png)
下面是我的脚本,用于对远程服务器中存在的文件进行计数。但它不起作用。
#!/usr/bin/expect
spawn ssh [email protected]
expect "123"
send "123"
interact
destPath='/archive/Input/ERICIN/AIR/EMG'
dayStamp=`(date --date='1 day ago' '+%Y%m%d')`
if [ -d $destPath ]
then
cd $destPath
`cat 'emg_audit_1_'$dayStamp.csv|grep 'ACTPSO_NE_'$dayStamp|wc -l > /home/stsuser/eastregioncount/NEremote$dayStamp.txt`
else
echo "ERROR: Path $destPath Does not Exists."
fi
答案1
为了让它发挥作用,我建议进行两项重大改变:
- 使用公钥/私钥对
- 在命令行上发送命令到 ssh
您可以使用ssh-keygen
生成新的私钥-公钥对,并使用ssh-copy-id
将生成的公钥安装到 上的新帐户172.0.0.2
。之后您就不必expect "123"
再执行该序列了。
这还使您能够ssh
更轻松地在命令行上调用命令(假设两台计算机上的时区相同):
destPath='/archive/Input/ERICIN/AIR/EMG'
dayStamp=`(date --date='1 day ago' '+%Y%m%d')`
ssh [email protected] "cd $destPath; cat 'emg_audit_1_'$dayStamp.csv| grep 'ACTPSO_NE_'$dayStamp| wc -l > /home/stsuser/eastregioncount/NEremote$dayStamp.txt"
if [ $? -ne 0 ]
then
echo "ERROR"
fi
cd 命令已经告诉您 $destPath 不存在,无需自己回显。但echo "Error"
如果有必要,您可以测试退出代码并执行一些更有意义的操作(比)。