我是 Linux 脚本新手。请帮忙。我在下面进行了很多搜索,但未能找到合适的答案:
我正在尝试制作一个脚本,稍后我将其安排为 cronjob,以便它继续在后端运行并将结果存储在文件 test.txt 中
脚本要点如下:
它通过 ssh 连接到主机,然后在该主机上运行一些命令并将结果保存在文件中。该脚本已成功连接到主机,但不会在主机上自动运行命令。脚本如下:
#!/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 上保存完整的输出第二件事是我希望这个输出文件在我自己的系统上而不是在主机上。任何帮助都将非常重要。
答案1
您尝试在这里实现几件事:
- 无需用户交互即可连接到主机
- 运行一些脚本并保存其输出
至 1:
最好使用公钥生成 ssh 密钥对ssh-keygen
并将其存储在主机上。不使用密码生成它,然后ssh
在连接时不会要求您输入密码。使用
client$ ssh -i <keyfile>
使用生成的密钥连接到您的主机。另请参阅 ssh(1) 和 sshd(8) 部分 AUTHORIZED_KEYS FILE FORMAT 了解如何在要识别的主机上添加公钥,主要是:
host$ cat <keyfile>.pub >> ~/.ssh/authorized_keys
(这必须在主机上完成!)
备注:私钥相当于密码!确保保证它的安全,以便只有 cron 作业可以使用它。查看 sshd(8) 部分 AUTHORIZED_KEYS 文件格式,它向您展示了如何限制生成的密钥对的使用,使其只能运行您的脚本!
致2:
您可以ssh
使用 shell 命令作为参数运行,包括 I/O 重定向。只需运行 例如/home/target/Script.sh 2>&1
并保存输出。完整的命令如下所示:
client$ ssh -i <keyfile> user@host '/home/target/Script.sh 2>&1' >>test.txt
test.txt
驻留在您自己的计算机上,脚本在主机上运行。
备注:该脚本将其输出定向到标准输出。主机上不需要特殊处理(除了重定向“2>&1”也可以捕获标准错误的输出。)