2017-08-02 5 views
2

bashスクリプトを使用してリモートサーバーにパスワードを送信しようとしています。これは、パスワードをより複雑なパスワードに変更する必要があり、新しいパスワードの1つに$文字(つまり[email protected]$sw0rd)が含まれるまでうまくいきました。私が働いなくなったスニペットが含まれている

password="'[email protected]$sw0rd'" 

spawn ssh "[email protected]$device" 
expect { 
    "*no)?" {send "yes\r"} 
    "*assword:" {send "$password\r"} 
    "*assword:" {send "$password\r"} 
} 

それはパスワードを送信するたびに、リモートシステムが変数$sw0rdを見つけようとします。

私はこの問題は、パスワード自体で$文字であるが、$文字が含まれていないものに私たちのリモートサーバーのすべてに、この1つのパスワードを変更せずにこれを行う方法があります知っていますか?

私は$文字を格納するためのさまざまな方法を試してみました。これらの

password='[email protected]$sw0rd' 
[email protected]$sw0rd 
password="'[email protected]\$sw0rd'" 
password="[email protected]\$sw0rd" 
password='[email protected]\$sw0rd' 
[email protected]\$sw0rd 

どれも働いていません。

お願いします。

+0

**リモートシステム**の問題のような音** –

+1

もっとコードを含めることはできますか?あなたのコードが実際には 'password ="何であれ ";期待する<< eof; ssh "$ deviceType @ $ device"を生成します。 ...;それが大きな違いになります。現在のところ、コードは部分的にBashで部分的にTCLであるため、実行可能ではないか、問題の代表ではありません。 –

答えて

4

spawnコマンドを使用しているため、実際にexpectスクリプトで、bashスクリプトではない可能性があります。これはexpectで動作するはずです:

もちろん
set password [email protected]\$sw0rd 

あなたはまた、上部に#!/usr/bin/env expectを追加したり、端末に直接expectのいずれかを使用して、そのスクリプトを実行するためにexpectを使用する必要があります。expect <SCRIPT>

+0

あるいは、Tclの補間されない引用符を使う: 'set password {P @ $ sw0rd}' –

0

@ArkadiuszDrabczykはあなたを持っています回答。

あなたはログインがが仕事を得るためにexp_continueを使用する必要があります。

spawn ssh "[email protected]$device" 
expect { 
    "*no)?" {send "yes\r"; exp_continue} 
    "*assword:" {send "$password\r"; exp_continue} 
    "*your prompt pattern here" 
} 
# ... carry on with the script 

exp_continueあなたは現在の期待コマンドに滞在し、他のパターンを探すために続けることができます。あなたは、あなたが脱出することを期待するために何か別のものが必要です。

関連する問題