• 締切済み

cygwin/sshd端末を旧来に戻す方法は?

最近cygwinのコンソールがminttyに変わったらしいのですが、 これだと昔動いていたDOSのバッチが動きません。また文字化けもひどいです。 これだけなら昔のコンソールを立ち上げDOSバッチを起動すれば済むのですが、 ホストにcygwin/sshdをインストールし、リモートからsshで接続すると、 勝手にホスト側でminttyで繋げてしまい、リモートからバッチを起動しても動作しません。 なんとかcygwin/sshdのコンソールを昔のminttyではない旧来のコンソールにできないものでしょうか?

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

mintty はちょっと忘れてください。 直接関係はありません。 .batということなので、中は、素のWindows用のコマンドを使って書かれているのではないでしょうか? 日本語版Windowsのコマンドは、通常、所謂Shift_JISで入出力します。 対し、CygwinはUTF-8に対応しています。 mintty等は、これに対応するため、UTF-8と解釈して表示するように標準では設定されています。 ※ minttyが標準になったのは、CygwinがUTF-8に正式に対応するようになってからです。 おそらく、従来のWIndowsのターミナルでは不十分だったからでしょう。 文字化けは、この文字コードの違いが原因と思われます。 「一致していないこと」が原因であって、ホスト、リモートどちらが「悪い」ということではありません。 ・hoge.bat がUTF-8で出力するようにする (ただし、使っているコマンドによっては無理) または ・端末側でShift_JIS表示にする (ただしCygwin 由来のUTF-8で出力するコマンドが文字化けするようになる) がとりあえずの解決策になります。 先に紹介したckは、部分的に文字コードを判定して、自動で対応する機能があり、複数の文字コードが使われている場合でも、比較的良好に表示されます。 ちなみに、そのバッチファイルと同じ機能を、Cygwinのコマンドだけのシェルスクリプトでは書けないのですか? Cygwin上のbashから実行するのに、batファイルである必要性が感じられません。 Windowsからも使うのなら、bash -e hoge.sh のような風に書かれた hoge.batを用意すれば、hoge.shの変更だけで済みますし。 ちなみに、Cygwinにはsleepというコマンドがあります。マニュアルで調べてみてください。

Donotrely
質問者

補足

#1のお答えに対し、具体的な事例を出して説明しましたので 質問の趣旨が間違って伝わってしまったようです。 また文字化けを問題にしているのでもありません。 この辺の説明も不足で間違って伝わったようです。 対話的処理はありませんのでバッチ的に処理が完了すればいいのです。 ただエラーメッセージが化けるのは痛いですが。 timeoutを例に出したのは、 旧来ターミナルからの起動と、minttyからの起動で、 互換性が無く、前者では動作するが、後者では動作しない、 ということを説明する為に過ぎません。 ですからtimeoutを、 DOSバッチでも旧来ターミナル/bashでもmintty/bashでも動くようにしたいとか、 その代りになるような記述はないかとか、 そういうことをお聞きしているのではないのです。 この辺も伝わらなかったかもしれません。 それ「だけ」、なら色々方法はあり、直せば終わりですし、 これについては既に他の方法(pingでごまかす方法)で、 どれでも動くように改修しました。 しかし昔から使用しているコードが沢山あったらどうでしょう? 書き直すとか、他の代替手段とか、 そのようなアドバイスはありがたいとは思いますが、 それをすればいいのであれば今回の質問はしていません。 最終的に問題が出る度にコードを眺めて直すという、 おおよそ趣味の世界風の対応でいいのなら色々方法は思いつきます。 一般には、 ターミナルが変わっただけで処理内容が変わり互換性が損なわれるということは無い、 と思われています。 しかし、不思議なことにminttyと昔のターミナルでは、 処理内容が違うように見えるのです(説明の通り)。 これに対しローカルであればターミナルを選ぶことにより対処することが可能です。 しかしsshで接続した場合は、勝手にmintty風の応答になり、 選択できないように見えるのです。 sshd_config等も見てみましたが、それらしき指定は見つかりませんでした。 ならばアンインストール的な方法は無いのか? これが質問の趣旨です。 宜しくお願いします。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> 勝手にホスト側でminttyで繋げてしまい ここがちょっとよくわからないのですが。 minttyの画面が出るのはホストマシンの方ですかリモート側ですか? おそらく、ホストは関係無く、Cygwin.batでbash を起動したらminttyが立ち上がるように、 sshを実行する環境として、minttyが起動しているのではないかと思います。 sshで継ぐだけなら、TeraTerm等のSSHクライアントで接続する、という方法があります。 minttyの代替品としてはck があります。 文字コードが混在しても比較的良好に表示してくれます。 http://www.geocities.jp/meir000/ck/

Donotrely
質問者

補足

理解が十分ではないのでおかしな質問をしたかもしれません。 もしかしたらターミナルの問題ではないかもしれません。 現象としては、ローカル上で、 C:\Windows\System32\timeout.exe /T 10 という内容のバッチファイル(hoge.bat)を作り、 昔のターミナルを立ち上げて、 ./hoge.bat とすれば動きます。 しかし、minttyを立ち上げて同じことをすると、文字化けを表示し失敗します。 失敗はしますがここまではとりあえずいいとします。 問題はここからです。 ホスト上に同じhoge.batを置いて、 cygwin/sshクライアントがインストールされた別のコンピュータからsshでホストに接続します。 ターミナルから ssh -l Administrator -p ポート アドレス を入力してホストに接続し、 ./hoge.bat を実行してもホストのcygwinが新しいせいか、 ローカルでminttyから実行した時のように同じ文字化けを表示し失敗します。 これは別のコンピュータからホストにsshで接続する際、 昔のターミナルを使ってもminttyを使っても、現象として変わらないのです。 ほぼホスト側の原因と言っていいと思います。これを回避したいということなんですが。

関連するQ&A

  • リモートコンソールからホストでCDOを動かしたい

    cygwin/sshで、リモートからホストに接続し、 リモート側のbashコンソールからホスト上のvbsを起動し、 下記にあるようなCDOによる方法でメールを送信したいのですが、 http://www.atmarkit.co.jp/fwin2k/win2ktips/428wshmail/wshmail.html うまく行きません。 ホスト上でcygwin/bashのコンソールを立ち上げ、 下記の方法で起動すると送信に成功するのですが、 cscript vbsのパス リモートからsshで接続したbashコンソールから同じことをすると、 DLLがダウンロードできないみたいなメッセージが出て正しく動きません。 たぶんCDOが狙った通り動作していません。 権限的にはAdministratorでログインしており、 他のroute addのような管理者権限の必要なコマンドもホスト上で実行できています。 かなり困っています。何とかしたいのですが、方法はありますでしょうか?

  • cygwin/bashとDOSの共通時間待ち

    timeoutというコマンドがありますが、bashとWindows(DOS)でそれぞれ意味が違います。 DOSのtimeoutでバッチファイルを作り、 DOSでも、cygwin/bashから呼び出しても動作するようにしたかったのですが、 うまく行きませんでした。 たぶん動くだろうと期待した、 cmd.exe /c timeout /T 10 は、cygwin/bashはbashのtimeoutと認識し、DOSのtimeoutとは認識しません。 つまりDOSでは動くのですが、cygwin/bashから起動しても正しく動作しません。 timeoutは、DOSでは少くとも外部コマンドではないと思うのですが、 単純に内部コマンドでもないかもしれません。 しょうがないのでpingを使って両用の待ちを実現していますが、 正直この種の方法は好きではありません。 何かいい方法はありますでしょうか?

  • sshdが自動起動するのは何故?

    Ubuntu(Linux)がよくわかっていない者です。 Ubuntu(10.04)をインストールしました。 その後に、Windows PCからリモート管理できるように、openssh-serverパッケージをインストールしました。そして、sshでリモート接続できるようになりました。 ただ、Ubuntuを起動すると何故 sshdが自動的に起動されるのかその仕組みがわかりません。 Apache HTTP Server(apache2)の場合、"sysv-rc-conf --list apache2"で確認すると、ランレベル2, 3, 4, 5がONになっていますし、/etc/rc5.d/S91apache2 等があるので自動的に起動するのは納得できました。 しかし、sshdについては /etc/rc5.d/ディレクトリなどにその起動スクリプトは見つかりませんでした。 どのような仕組みでsshdは自動起動されるのでしょうか?

  • cygwin1.7.1のコンソールでS-JISを表示するには?

    cygwin1.7.1のコンソールでS-JISを表示するには? 以前のcygwinのコンソールはS-JISの出力が正しく表示されていました。1.7.1からはコンソールの文字コードがUTF-8になったようですが、S-JISで文字を出力する昔の遺産がたくさんあり、文字化けしてしまいます。 コンソールの文字コードをS-JISにするにはどうすればいいでしょうか?

  • ポートフォワードするためには、相手のネットワーク内にsshdサーバーが無いと無理でしょうか?

    会社から自宅のサーバーA Windows 2008 に対してポートフォワード?という仕組みを使いたいのですが、初めてなのでよくわかっていません。 家のサーバーAはルータの下にあり、ipは192.168.0.10です。 会社からは、sshコマンドやsshソフトでアクセスする予定ですが この場合、自宅サーバーAはsshd(sshのサーバー)が起動が無いと無理なのでしょうか? 別の自宅サーバーBにLinuxサーバーをたてるかもしくは自宅サーバーAにWindows用のsshdサーバーアプリを実行させる必要があるのでしょうか? 最終目的は、ssh経由でリモートディスクトップ接続したいです。

  • cygwinを導入したのにコンソールが起動しない

    win2000上にcygwinを導入しました。 導入後、デスクトップ上にcygwin起動のショートカットアイコンが 表示されるので、クリックしましたが、一瞬コンソールが開いて、 すぐ消えてしまい、そのあと何の反応もありません。 本体のほうをクリックしても同じ動作です。 cドライブが空き容量がすくなかったので、 dドライブに導入したのですが、問題ありませんよね? 何がいけないのかわかりません。教えてください。

  • cygwin上でvbscirptを実行する方法

    cygwinのコンソール画面で、hello.vbsというvbsファイルを起動し、vbスクリプトを実行する イメージです。 実現したいことは以下です。 UNIXサーバから、rshコマンドで、Windowsサーバのシェル(cygwin上)を実行する。 Windowsサーバのシェルは、さらに、vbscirpt(拡張子.vbs)を内部で実行する。 本来は、Windowsサーバのシェルのみで実装したいのですが、vbscriptで動作させる方法 しか分からないので、上記方法をとりたいと思っています。

  • FreeBSDデフォルトで入っているsshdのバージョンアップなど

    windowsにvmwareを走らせてその上でfreebsdを動かして遊んでいます。 同時に起動させているfreebsdの数は3~7です。 ホストos側にメモリを多めに積んでいるのですが、さすがにゲストOS側に提供するメモリが足りません。 そこでメモリ使用量の見直しを行おうと思いました。 各ホストでは標準でインストールされているsshdを利用しています。 このsshdがバージョンによって利用するメモリの量が違っていました。 セキュアな通信を提供してくれるsshdで古いバージョンを利用し続けることには抵抗がありますし、まずはこのsshdのバージョンをアップさせようと思っています。 普段パッケージのインストールなどはportsを利用しており、バイナリから、ソースを自分で拾ってきてコンパイルなどのインストールはあまり理解していません。とはいえ、利用歴だけは長いのである程度はわかります。 さて、このsshdのバージョンアップにはどういった手段をとるのがいいでしょうか? 設定ファイルの入れ替え、バイナリの差し替え、コンパイルなど、解説しているサイトがあったら教えてください。 バージョンの一つを記述しますが、前述の通り複数台のホストがありますので多少のバージョン差異があります。 OpenSSH_4.5p1 FreeBSD-20061110, OpenSSL 0.9.8e 23 Feb 2007 osのバージョンはあまり利用しないものも含めてFreeBSD 5.2ぐらい~FreeBSD7.0です。

  • CygwinでXを飛ばしたい

    Windows XP SP3でCygwin 1.5.25を使用しています。 Xを立ち上げ、sshでネットワーク越しに他のPCに入ってアプリを立ち上げようとすると、以下のようなエラーが出ます。 Error: Can't open display localhost:11.0 なお自分の側のDISPLAYは.bashrcで指定しています。 自分のところでXを立ち上げ、アプリを起動する分には問題はありません。 また付随しての質問ですが、$HOME以下の.bashrcを起動時に読まないのは何故でしょうか? デフォルトで.bashrcそのものがなかったので、作りました。 それと.Xauthorityも$HOME以下にありませんでした。 .Xauthorityも作りましたが、sshでログインしても、ログイン先のキャッシュが書き込まれません。 この辺に原因があるのでしょうか。

  • rsh(リモートシェル)で返り値を返さない方法

    現在、2つのunixマシンで運用を行っております。 1つはコンソール、1つはバッチ系です。 コンソールには、XWindow以外入っておりません。 バッチ系には、ジョブの起動と、エラーを検知するソフトが入っております。 そこで、バッチが異常終了すると、もうひとつのコンソールに異常終了を示すウインドウを表示したいと思っております。 仕掛けとしては、バッチ系のエラーを検知するソフトにエラーが出たら、 リモートシェルでコンソールにウインドウを表示するようにしました。 そこで、問題なのが、ネットワーク異常があった場合、リモートシェル自身がうまく出来なく、リモートシェルの返り値がエラーと判断されて、永久ループに陥ってしまいました。 そこで、リモートシェルは返り値を返さず、投げっぱなしにはできないでしょうか? 宜しくお願い致します。