Linux
連接後在主機上執行腳本的問題
我是 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 上保存完整的輸出第二件事是我希望這個輸出文件在我自己的系統上而不是在 host 上。任何幫助都將是可觀的。
您嘗試在這裡實現幾件事:
- 無需使用者互動即可連接到主機
- 執行一些腳本並保存其輸出
到 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 重定向。只需執行 eg/home/target/Script.sh 2>&1
並保存輸出。完整的命令如下所示:client$ ssh -i <keyfile> user@host '/home/target/Script.sh 2>&1' >>test.txt
test.txt
駐留在您自己的機器上,腳本在主機上執行。備註:腳本將其輸出定向到標準輸出。主機上不需要特殊處理(除了重定向 ‘2>&1’ 來擷取輸出到標準錯誤。)