我是 Linux 脚本的新手。请帮忙。我在下面搜索了很多但找不到合适的答案:
我正在尝试制作一个脚本,稍后我会将其安排为 cronjob,以便它继续在后端运行并将结果存储在一个文件中,比如 test.txt
脚本要点如下:
- 它通过 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/