今日、私はインベントリソフトウェアにログインし、csvをダウンロードし、cronタスクを使用して定期的にWebディレクトリに配置できる最小限のサーバー用の小さなスクリプトを作成しました。
scriptreplayがw3mを使用して最初にロードした実際のウェブサイトではなく、実際にターミナル出力を再生するという事実に気付くまで、scriptとscriptreplayを使用してこれを完全に実行できました。
だから、元の指示に従うためにSSHを介してキーストロークを記録する方法を探しています。
誰でもどんなアイデアがありますか?失敗した場合、他のオプションがある人はいますか?私たちのサーバーはUbuntuのミニバージョンを実行しているので、GUIはありません。
答え1
だから多くの試行錯誤の終わりにガレブ私たちはついに問題の解決策を見つけました。在庫管理ソフトウェアに直接ログインしようとしましたが、面倒でしたが、今夜やり取りした会話に基づいて問題を解決しました。キーストロークをまったく記録する必要はありません。ちょうど良い高齢者の使用法。
スクリプトの最初の接続は、ログインしてCookieにセッションを作成することです。
curl -s -c cookiejar.txt -b cookiejar.txt -L -d '[email protected]&pass=******' -e 'https://my.channelgrabber.com/login.php' https://my.channelgrabber.com/login.php -o /dev/null
次に別のページをリクエストできますが、前のページをスキップする必要があります。たとえば、上記の後に以下を実行できます。
curl -s -c cookiejar.txt -b cookiejar.txt -L -e 'https://my.channelgrabber.com/index.php' https://my.channelgrabber.com/products.php -o products.html
これは私が必要とするものを正確に行います。ここでクッキーを使用して削除し、必要なものを検索します。
rm -rf cookiejar.txt
...5分ごとに実行されるクローンジョブに設定します。完全な機能についてはいくつかの行を作成しましたが、これはすべてを解決しました。多くの試行錯誤を受けました。もう一度ありがとうガレブこれをすべて助けてくれた人。
答え2
コマンドを記録して再生することは、この問題を解決する誤った方法です。代わりに、ジョブを処理するスクリプトを作成する必要があります。シェルスクリプトは基本的にコマンドのリストにすぎません。まるでコマンドラインでそれを実行するために実行しているかのようです。エディタで新しい黒いプレーンテキストファイルを起動し、最初の行に実行するシェルを入力します。たとえば、次のように始めることをお勧めします。
#/usr/bin/env bash
今、同じ名前で保存してくださいfetch_and_post_logs.bash
。この場所は見つけることができる場所でなければならず、cron
良い/usr/local/bin/
選択かもしれません。
次に、スクリプトを実行可能にします。
$ chmod 755 /usr/local/bin/fetch_and_post_logs.bash
それでは、このスクリプトをより具体的に見てみましょう。このセクションではいくつかの知識を直接提供する必要がありますが、まずリモートサーバーからローカルフォルダに何かをコピーするとします。
#/usr/bin/env bash
timestamp=$(date +%Y-%m-%d)
scp user@remotehost:/path/to/logs.csv /path/to/www/logs-${timestamp}.csv
次に、cronでこのスクリプトを実行します。
0 0 * * * /usr/local/bin/fetch_and_post_logs.bash
今始める必要があります。さらにヘルプが必要な場合は、問題が何であるかを具体的に尋ねてください。
この機能を使用するには、cron
パスワードなしで問題のユーザーとしてログインできる必要があるため、ログへの制限付きアクセス権を持つユーザーを設定してから公開/秘密鍵パラメータを追加する必要があります。認証する。
答え3
問題を解決するより良い方法があるという他の人の意見に同意します。ただし、実行した作業を文書化し、後でスクリプトを書くことでいくつかの利点を見ることができます。
入力を追跡するには、tee
次のように入力をファイルに渡します。
tee logFile < /dev/stdin | bash
CTRL- を使ってオフにできますD。
答え4
コンピュータにコマンドを記録し、スクリプトの先頭を作成させます。これは次のような場合に便利です。TCL、特にexpect
。
$ autoexpect ssh somesystem
autoexpect started, file is script.exp
Last login: Mon Jan 23 15:14:04 2017 from 84-182-91-4.dyn.example.net
somesystem$ pwd
/home/jdoe
somesystem$ exit
logout
Connection to 192.0.2.42 closed.
autoexpect done, file is script.exp
$ cat script.exp
...
あるいは、通常のスクリプトも簡単です。
#!/usr/bin/env expect
package require Tcl 8.5
set timestamp [clock format [clock seconds] -format "%Y-%m-%d"]
exec scp user@host:/in/log.csv /out/log-$timestamp.csv
spawn
次の自動化と対話する必要がありますか?それがinteract
目的です。パスワードの入力を求められますか?自動化はそれほど難しくありませんexpect
。