私は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-keygen
公開鍵を使用してSSH鍵ペアを生成し、それをホストに保存するのが最善です。パスワードなしで作成すると、ssh
接続時にパスワードを要求されません。使用
client$ ssh -i <keyfile>
生成されたキーを使用してホストに接続します。識別したいホストに公開鍵を追加する方法については、ssh(1)およびsshd(8)セクションAUTHORIZED_KEYS FILE FORMATも参照してください。主に次のようになります。
host$ cat <keyfile>.pub >> ~/.ssh/authorized_keys
(これはホストコンピュータで行う必要があります!)
注:秘密鍵はパスワードと同じです! cronジョブのみを使用できるようにセキュリティを強化します。 AUTHORIZED_KEYSファイル形式のsshd(8)セクションを確認してください。生成されたキーペアの使用を制限してスクリプトのみを実行できるようにする方法を説明します。
2:
ssh
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」をリダイレクトすることを除く)。