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

标签 linux shell ssh

我是 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/

相关文章:

linux - 如何修复 "file.cmpr: unknown suffix -- ignored"

linux - (Linux) 如何在没有显示环境的情况下运行gtk 程序? Gtk 警告 ** : cannot open display:

java - Java中使用JSch转发端口时的"local port ... cannot be bound"

c# - 使用 SSH.NET 连接到远程主机

windows - 在 Windows 7 上配置 GitBash : ssh failing, 我正在尝试一切,发疯了

c++ - 在 Linux 上使用 libserial 从串行端口读取额外字符

c++ - 为什么会出现此错误? void* 不是指向对象类型的指针。

c++ - 虚拟处理器和高级网络 linux 和 windows

linux - 什么是./lks.sh : Permission denied in Linux when running a shell script?

shell - 在视觉选择上运行 shell 命令