2017-06-15 9 views
0

これまでのところうまくいきます。これは既存のsshトンネルにsshセッションを生成します:SSHで期待通り

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o {ProxyCommand=nc -X 5 -x localhost:8888 %h %p} "$user_ip" 

$user_ip[email protected]

のような問題が時々、ポート8888が別のSSHトンネルで使用されていることであり、これが起こるたびに、私が持っている、ユーザ名と送信先IPを持っていますコードを調整してトンネルポートを変更します。

私は変数にポートを送信しようとしていますが、コードに常に触れないようにしています。 として、私は、コマンドラインからトンネルポートを取得しています:私はproxy_port変数が正しく設定されていることがわかりますが、スクリプトは、SSHを起動しようとすると、私が取得

set proxy_port [lindex $argv 2] 

、その後

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o {ProxyCommand=nc -X 5 -x localhost:"$proxy_port" %h %p} "$conn" 

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o {ProxyCommand=nc -X 5 -x localhost:8888 %h %p} [email protected] 
command-line line 0: garbage at end of line; "-o". 
send: spawn id exp5 not open 
    while executing 
"send "$pwd\r"" 
    (file "./amm-qev.new.exp" line 36) 

上記のエラーでは、ポートが正しく置換されていることがわかりましたが、ssh構文について不平を言います。

私の弱い目が引っ掛かっていないのは何ですか?

+0

スタックオーバーフローは、プログラミングおよび開発の質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。また、[Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww

+0

@jwwしかし、 "Stack Overflowはプログラミングと開発の問題のサイトです" _ "それはプログラミングや開発についてではない"ということに全く同意しない。問題は、** expect **スクリプト言語でプログラミングしている間の問題です。**多くの場合、** Stack Overflow **に掲載されています。 – Renato

答えて

2

Tclの{...}シンタックスは、$varが展開されないシェルのシングルクォート文字列('...')に似ています。二重引用符を使用してください。

spawn ssh -o UserKnownHostsFile=/dev/null \ 
      -o StrictHostKeyChecking=no \ 
      -o "ProxyCommand=nc -X 5 -x localhost:$proxy_port %h %p" \ 
      "$conn"