gpt4 book ai didi

linux - 连接后无法在主机上正确运行脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:03 25 4
gpt4 key购买 nike

我是 Linux 脚本的新手。请帮忙。我在下面搜索了很多但找不到合适的答案:

我正在尝试制作一个脚本,稍后我会将其安排为 cronjob,以便它继续在后端运行并将结果存储在一个文件中,比如 test.txt

脚本要点如下:

  1. 它通过 ssh 连接到主机,然后在该主机上运行一些命令并将结果保存在文件中。脚本成功连接到主机,但没有在主机上自动运行命令。脚本如下:

 #!/usr/bin/expect
spawn ssh guest@host-ip
expect "host pwd"
send "pass123\r"
interact
cd /home/target/ ... /* goes to some specific path*/
./Script.sh >> test.txt /* runs a script on host and saves the result*/
exit

所以我根据其中一个答案更新了我的脚本......如下 -

#!/usr/bin/expect -f
spawn ssh aspen
expect "password: "
send "PASSWORD\r"
expect "$ "
send "/bin/sh /home/target/Script.sh >>test.txt"
expect "$ "
send "exit\r"

但是当我运行这个脚本时,它不会在 test.txt 上保存完整的输出。第二件事是我希望这个输出文件在我自己的系统上而不是在主机上。任何帮助都将不胜感激。

最佳答案

在你这边运行下面的脚本。它将作为用户 user ssh 进入 aspin。整个 ssh session 的输出,包括/home/target/Script.sh 的输出,将被附加到本地文件 test.txt 此外,grep 去除了期望被提示输入密码的情况。

#!/bin/bash

{
/usr/bin/expect <<- EOF
spawn ssh user@aspin "/home/target/Script.sh"
expect "password:"
send "PASSWORD\r"
expect eof
EOF
} |grep -v "user@apsin's password:">> test.txt

或者,对于程序员来说,可以说更安全、更简单的方法是,您应该取消 expect 并使用 ssh 使用加密 key 登录 aspin,该 key 可以证明您的身份,而不会提示您输入密码。

一步一步的过程:

$ ssh-keygen 

系统将提示您输入密码。如果你想取消使用 expect,你可以使用一个空的密码。您的下一步是将您的公钥复制到 user@aspin:~/.ssh/以便您可以使用您的私钥来证明自己。

$ ssh-copy-id  user@aspin

您现在应该可以在不询问密码的情况下登录。如果您使用基于 rsa key 的身份验证且没有密码短语,则您的本地脚本可能如下所示

#!/bin/bash
ssh user@aspin "/home/target/Script.sh" >> test.txt

有关期望和远程登录的更多信息,请查看:When to use Expect scripting and when to avoid it.

关于linux - 连接后无法在主机上正确运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23104472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com