TTProxy が半角スペースを含むコマンドラインオプションを認識しない
connect 'host /F="C:\Some Where\TERATERM.INI"'
というように、ファイル名を""で括ってください。
お世話になっております。
""で括ると接続できました。 ありがとうございました。
connectコマンドのオプション/Fでは ファイル名を""で括ると半角スペースが存在していても接続できましたが、 オプション/keyfileではうまくいきません。
/keyfileで半角スペースを含むファイルパスは指定できないのでしょうか。
確認しましたが、手元ではうまく動いています。
秘密鍵ファイルをパスにスペースを含まない場所に置いたらうまくいくのですか?
調査の結果、現状では以下の事項が確認できています。
□環境:Teraterm Ver4.80 利用PC:Win7 SP1 ・秘密鍵ファイル(A)をスペースを含まないパスに指定した場合は正常に接続できた。 ・秘密鍵ファイル(B)をスペースを含むパスに指定した場合は正常に接続できた。
ただ、秘密鍵ファイル(A)を指定するマクロ(A)で使うiniファイル(A)と 秘密鍵ファイル(B)を指定するマクロ(B)で使うiniファイル(B)には プロキシの設定があるかないかの違いがあります。
・iniファイル(A) →プロキシ設定あり。 TTProxy ConnectionTimeout="10" SocksResolve="auto" TelnetHostnamePrompt=">> Host name: " TelnetUsernamePrompt="Username:" TelnetPasswordPrompt="Password:" TelnetConnectedMessage="-- Connected to " TelnetErrorMessage="!!!!!!!!" ProxyType="http" ProxyHost="proxyXXX.XXX.XXX.co.jp" ProxyPort="8080"
・iniファイル(B) →プロキシ設定なし。
また、iniファイル(A)、(B)ともにsshポート転送の設定が入っていますが、 こちらは接続できてもできなくても設定の読み込みは正常に行われているように見受けられます。
マクロ(A)は半角スペースを含まないパスをiniファイル(A)、秘密鍵ファイル(A)共に指定した場合、 正常に接続されますが、 半角スペースを含むパスを指定するとプロキシの設定だけ?が読み込まれておらず、 今回の事象に至っています。
プロキシ設定の読み込まれ方に何か制限があるのでしょうか。
補足情報です。 以下の①ではプロキシ設定が正常に読み込まれましたが、②では読み込まれませんでした。 また、②で読み込まれない事を確認後、メニューから同じ設定ファイルを手動で読み込むと、 プロキシ設定が読み込まれました。
※最終的には /Fオプションのファイルパスは予め変数に格納しておき、 ファイルパスにスペースがあってもなくてもプロキシ設定を読み込んだ上で 接続できるようにしたいです。
※マクロファイルはD:\WINDOWS\TTL\test2\にあります。
①マクロ(A):プロキシ設定読み込み可能-------------------------------- path = 'D:\WINDOWS\TTL\test2\01ini' INI = 'TERATERM.INI'
makepath INIPATH path INI
cmd = 'XXX.XXX.XXX.XXX:22 /ssh /auth=passwd /user=root /passwd=XXXXX' strconcat cmd ' /F=' strconcat cmd INIPATH
connect cmd
②マクロ(A):プロキシ設定読み込み不可-------------------------------- path = 'D:\WINDOWS\TTL\test2\01ini' INI = 'TERATERM.INI'
makepath INIPATH path INI
cmd = 'XXX.XXX.XXX.XXX:22 /ssh /auth=passwd /user=root /passwd=XXXXX' strconcat cmd ' /F="' strconcat cmd INIPATH strconcat cmd '"'
connect cmd
「/F=オプションでINIファイル名をダブルクォーテーションではさんでいると、TTProxyオプションが読み込まれない」ことを確認しました。
これ以外に問題がありますか?
現状では「/F=オプションでINIファイル名をダブルクォーテーションではさんでいると、TTProxyオプションが読み込まれない」 以外の問題はありません。
修正版を作成しました。これで認識するでしょうか。
修正版で試してみましたが、認識できませんでした。 現象変わらずでTTProxyオプションだけが認識されていません。
ちなみにスペースを含む文字列を変数に格納するときは と "" とで特に違いや制限はないと思っていますが間違いないですか。
スペースを変数に含めるとき、シングルクォートとダブルクォートで特に違いはないと思います。
メモリの初期化漏れがあったため、修正しました。これではどうでしょうか。
修正版で試してみましたが、改善されませんでした。 今回はTeratermのiniファイルも認識していないように見受けられます。
TTProxy が引数を受け取る部分の問題か、マクロの connect コマンドが引数の受け取る部分の問題か確かめるため、以下の2種類の方法で確認しましたがどちらでも反映されました。
INIファイルを次のように変更したものを、フォルダ名にスペースを含んだ場所に置き、INIファイルを引数に渡して起動しました。
[Tera Term] ; すぐわかるように適当に変更 Title=Tera Term zzz ; 接続に失敗したあとに設定を確認できるように AutoWinClose=off ; 念のためこのセクションも [Host] Host1=hoge [TTProxy] ; デフォルトの10から確認用に変更 ConnectionTimeout=20 ; TypeとHostの両方が設定されていないとNONEになる ProxyType=http ProxyHost=hoge
1)コマンドプロンプトから
ttermpro /F="Z:\a b\teraterm.ini"とINIファイルを指定して実行する
2)このようなマクロを書き
connect 'hostname /F="Z:\a b\teraterm.ini"'コマンドプロンプトから
ttpmacro hoge.ttlとマクロファイルを指定して実行する
どのように確認しているのでしょうか。
確認方法と結果を以下に記載します。 ttpmacroの③の結果から秘密鍵ファイルが読み込めていないように見受けられます。
■フォルダ構成 ※ini内と02 ini内は同じファイル D:\01TEST\01_MANAGE │ hoge.ttl │ ├─ini │ │ hoge.id_rsa │ │ TERATERM.INI │ │ │ └─02 ini │ hoge.id_rsa │ TERATERM.INI │ └─Log
■マクロ ;; 接続情報定義 ==================================
GW_HOSTNAME = 'huga.mydns.jp' GW_PORT = '10022' GW_USERNAME = 'huga' GW_PASSWORD = 'password' GW_INIFILE = 'TERATERM.INI' GW_KEYFILE = 'hoge.id_rsa'
;; ===============================================
cmd = GW_HOSTNAME strconcat cmd ':' strconcat cmd GW_PORT strconcat cmd ' /ssh /auth=publickey /user=' strconcat cmd GW_USERNAME strconcat cmd ' /passwd=' strconcat cmd GW_PASSWORD strconcat cmd ' /F=' strconcat cmd 'D:\01test\01_Manage\ini\TERATERM.INI' strconcat cmd ' /keyfile=' strconcat cmd 'D:\01test\01_Manage\ini\hoge.id_rsa'
connect cmd
■ttermpro ・パスにスペース無し ttermpro /F="D:\01test\01_Manage\ini\TERATERM.ini" →○ ・パスにスペースあり ttermpro /F="D:\01test\01_Manage\ini\02 ini\TERATERM.ini" →○
■ttpmacro ①パスにスペース無し strconcat cmd ' /F=' strconcat cmd 'D:\01test\01_Manage\ini\TERATERM.INI' strconcat cmd ' /keyfile=' strconcat cmd 'D:\01test\01_Manage\ini\hoge.id_rsa' →○
②パスにスペースあり strconcat cmd ' /F=' strconcat cmd 'D:\01test\01_Manage\ini\02 ini\TERATERM.INI' strconcat cmd ' /keyfile=' strconcat cmd 'D:\01test\01_Manage\ini\02 ini\hoge.id_rsa' →× 一瞬画面が表示されるがすぐ閉じる。
③iniファイル:スペース無し、秘密鍵:スペースあり strconcat cmd ' /F=' strconcat cmd 'D:\01test\01_Manage\ini\TERATERM.INI' strconcat cmd ' /keyfile=' strconcat cmd 'D:\01test\01_Manage\ini\02 ini\hoge.id_rsa' →× iniファイルは読み込まれているが、タイトル:TTPROXY、メッセージ:h が表示される。 →直後にNewConnectionで接続を試みると、Private Key Fileの入力パスが「D:\01test\01_Manage\ini\02」となっていた。
④iniファイル:スペースあり、秘密鍵:スペース無し strconcat cmd ' /F=' strconcat cmd 'D:\01test\01_Manage\ini\02 ini\TERATERM.INI' →× 一瞬画面が表示されるがすぐ閉じる。 strconcat cmd ' /keyfile=' strconcat cmd 'D:\01test\01_Manage\ini\hoge.id_rsa'
すみませんが、改行がなくなっているので、Wiki文法を使って改行が表示されるようにしてもらえると読みやすいです。
2,3,4 の書き方はどれも、INIファイル・秘密鍵ファイルにスペースを含んでいる場合にファイル名をダブルクォートでくくっていませんね。
2,3,4 の書き方はどれも、INIファイル・秘密鍵ファイルにスペースを含んでいる場合にファイル名をダブルクォートでくくっていませんね。BR
→以下でスペースありでも接続する事ができました。お騒がせしました。BR strconcat cmd ' /F='BR
※見づらくて申し訳ありません。BR 改行コードを追加しましたので一応載せておきます。BR
確認方法と結果を以下に記載します。BR
■フォルダ構成 ※ini内と02 ini内は同じファイルBR D:\01TEST\01_MANAGEBR
■マクロ ;; 接続情報定義 ==================================BR GW_HOSTNAME = 'huga.mydns.jp'BR
BR ;; ===============================================BR
cmd = GW_HOSTNAMEBR
■ttermproBR ・パスにスペース無し ttermpro /F="D:\01test\01_Manage\ini\TERATERM.ini" →○ BR ・パスにスペースあり ttermpro /F="D:\01test\01_Manage\ini\02 ini\TERATERM.ini" →○BR BR
■ttpmacroBR 1)パスにスペース無し BR strconcat cmd ' /F='BR
2)パスにスペースあり BR strconcat cmd ' /F='BR
3)iniファイル:スペース無し、秘密鍵:スペースありBR
4)iniファイル:スペースあり、秘密鍵:スペース無しBR
TeraTerm Ver.4.75を利用しております。
マクロでconnectコマンドを利用する際、 /Fオプションや/keyfileオプションで指定するファイルパスに半角スペースが入っていると コマンドが失敗してしまいます。
半角スペース(もしくは他の特殊文字も含めて)が混入していても connectコマンドで接続できるようにして頂けないでしょうか。