bashスクリプトはコマンドを実行しますが、ファイルに別のデータを保存します。

bashスクリプトはコマンドを実行しますが、ファイルに別のデータを保存します。

リモートサーバーに接続し、scpを使用してログファイルをローカルサーバーにコピーするbashスクリプトがあります。リモートサーバーからキーをコピーまたはインストールすることはできません。私の権利は限られています。分析するダンプログがあるので、ローカルサーバーにコピーしたいと思います。 Expectコマンドをパスワードとして使用しているので、これは少し面倒です。このスクリプトはscp.shそれは次のとおりです。

#!/bin/bash

expect -c "
    spawn scp "[email protected]:~/path/dir/some.log" /home/some.log

expect \"Password\"
send \"password\r\"
interact .

2つのサーバー(TESTとLIVE)と2人のユーザーがいて、次のように実行したいと思います:./scp.sh TESTまたは./scp.sh LIVE

ベストアンサー1

bashスクリプト(またはスクリプト)expectで作成するのではなく、呼び出されたスクリプトで作成すると、状況がより複雑になります。これは、一致する2つの異なる見積もりを受け取る必要があることを意味します。リストからコマンドラインパラメータにアクセスできます。expectenvtcl$argv

#!/usr/bin/env expect
set arg1 [lindex $argv 0]
if {$arg1 == "TEST"} {
    set user "xxx"
    set host "host1"
    set pass "testpass"
} elseif {$arg1 == "LIVE"} {
    set user "yyy"
    set host "host2"
    set pass "livepass"
} else {
    send_user "First parameter is not TEST or LIVE"
    exit 1
}

spawn scp "$user@$host:~/path/dir/some.log" /home/some.log

expect "yes/no)? " {send "yes\r" ; exp_continue} "Password"
send "$pass\r"

スクリプトにパスワードを含めることはお勧めできませんが、コマンドラインにパスワードを渡すよりも優れています。

おすすめ記事