预期脚本无法将服务器日志提取到文本文件中



我正在尝试从Unix客户端计算机访问远程ssh服务器。为此,我使用了期望脚本,该脚本调用bash脚本从服务器日志文件中获取一些行。

下面是我的代码:

#!/usr/local/bin/expect -f
set pass "password"
set prompt "(%|$|#)"
spawn ssh deployed@172.16.166.111
expect "password:"
send "$passr"
expect -re $prompt
send -- "./access_srvr_log.shr"
send -- "exitr"

access_srvr_log.sh文件的代码:

#!/usr/local/bin/expect
dir="/home/deployer/Desktop/McKinsey-McKinsey-AdminPanel/log"
tail -n 100 $dir/development.log
echo "hello"
echo >> log.txt

我收到此错误:

./access_srvr_log.sh
-bash: ./access_srvr_log.sh: No such file or directory

请帮忙。我对上面的代码进行了很多更改,最终到达了这里。

谢谢。

朋友不允许朋友使用 SSH 密码。它的安全性要低得多。

使用 ssh-copy-id 将公钥复制到远程服务器。(它将客户端~/.ssh/id_rsa.pub放入服务器.ssh/authorized_keys现在您可以运行"ssh deployer@172.16.144.111 ./access_srvr_log.sh",它不会提示输入密码。这意味着您不再需要expect以及随之而来的所有奇怪问题。

实际上,强烈建议您一起禁用SSH密码。

要使您的脚本更简单(维护方面),请执行以下操作:

1) 在客户端上运行ssh-keygen -f ~/.ssh/scriptkey(不要输入密码)。

2) 将密钥的公共部分(~/.ssh/scriptkey.pub客户端)放入服务器上的.ssh/authorized_keys中。 但这一次,把command="/home/deployer/access_srvr_log.sh"放在新密钥之前。这会告知服务器为该密钥运行该命令。

3)现在你的脚本甚至不需要指定命令,只需要指定私钥。(即 scp -i ~/.ssh/scriptkey deployer@172.16.144.111将运行脚本)。这允许服务器在不更改客户端的情况下进行更改(即移动脚本,更改脚本名称)。 这也意味着窃取您的(不受密码保护的)密钥的人无法登录服务器,而只能运行您的日志脚本。

而且脚本中没有可猜测的密码。(您正在将脚本签入版本控制,对吗?

你也可以简化它

#!/bin/bash
{
/usr/bin/expect  <<- EOF
    spawn ssh deployer@172.16.144.111 "tail -n 100 /home/deployer/Desktop/McKinsey-McKinsey-AdminPanel/log/development.log"
    expect "password:"
    send "deployerr"
    expect eof
EOF
} |grep -v  "deployer@172.16.144.111's password:">>  log.txt

最新更新