Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用expect脚本在远程服务器上执行本地shell脚本(不在远程服务器上复制)_Shell_Expect - Fatal编程技术网

使用expect脚本在远程服务器上执行本地shell脚本(不在远程服务器上复制)

使用expect脚本在远程服务器上执行本地shell脚本(不在远程服务器上复制),shell,expect,Shell,Expect,我不熟悉脚本编写的世界。使用expect脚本在远程服务器上执行本地shell脚本时遇到问题。 我的剧本如下 VAR=$(/home/local/RD/expect5.45/expect -c " spawn -noecho ssh -q -o StrictHostKeyChecking=no $USER@$HOST $CMD match_max 100000 expect \"*?assword:*\" send -- \"$PASS\r\" send -- \"\r\" send \"exi

我不熟悉脚本编写的世界。使用expect脚本在远程服务器上执行本地shell脚本时遇到问题。 我的剧本如下

VAR=$(/home/local/RD/expect5.45/expect -c "
spawn -noecho ssh -q -o StrictHostKeyChecking=no $USER@$HOST $CMD
match_max 100000
expect \"*?assword:*\"
send -- \"$PASS\r\"
send -- \"\r\"
send  \"exit\n\r\"
expect eof
")
如果CMD是像df-kh这样的基本命令,它就可以正常工作;顶部 但我需要在远程服务器上收集一些统计数据,我已经为这些数据创建了一个shell脚本。 我试着跟不上,但运气不好

spawn -noecho ssh -q -o StrictHostKeyChecking=no $USER@$HOST 'bash -s' < localscript.sh
无法在远程服务器上拾取并执行localscript。
请帮助解决此问题。

上次我尝试这样做时,我很快就厌倦了使用expect1尝试正确响应密码提示。当我最终花了十分钟来学习如何,并使基于密钥的登录更容易自动化时,我从未遇到过远程运行脚本的问题:

ssh remotehost "commands ; go ; here"
首先,检查是否需要创建密钥或是否已经有密钥:

ls -l ~/.ssh/id_*
如果未列出任何文件,请运行:

ssh-keygen
然后回答提示

生成密钥后,将其复制到远程系统:

ssh-copy-id remote
大多数现代系统在桌面启动时运行ssh-agent1;要确定是否已启动代理,请运行:

ssh-add -l
如果你看到代理没有身份,那你就可以走了。如果看到,则无法打开与身份验证代理的连接。然后,您必须研究将ssh-agent1插入环境的最佳位置。或者,完全放弃代理,这只是一个很好的方便

添加您的密钥,可能会有一个超时,因此它只在短时间内有效:

ssh-add -t 3600
现在测试它:

ssh remote "df -hk ; ps auxw ; ip route show ; free -m"

expect1绝对是一个简洁的工具,但使用SSH密钥在远程系统上进行身份验证更容易、更安全。

Tnx用于快速回复。它与ssh密钥无关。由于ssh-q-o strichhostkeychecking=no$USER@$HOST'bash-s'