#z/OSのSSHについての補足
マルチ・プラットフォームを扱うインフラ屋さんのための連携技術: SSH編の続きです。
異なるプラットフォームを扱う際は、「文字コード」の違いが問題になるケースがあります。
大体こんな感じの使い分けがされてます。
- Windows: SJIS
- Unix/Linux: UTF-8/ECU-JP/SJIS
- z/OS(USS含む): EBCDIC
z/OSのUSS(Unix System Service)は、Unixと言いながらもメインフレームなだけあってやっぱり文字コードはEBCDICで扱われます。
z/OSのユーザー・インターフェースについて考える ~teraterm利用のすゝめ~
こちらの記事でも書いているように、z/OSのUSS使うときも他のプラットフォームと同じようにteraterm使いましょうよ、ということを言っているのですが、teratermが普通にz/OSでも使えているのが実は不思議でした。コード変換ってどうしてるのかな~?という疑問をしばらく放置していたのですが、関連する記述見つけたので補足しておきます。
z/OS V2.2のマニュアル
z/OS V2R2 OpenSSH User's Guide - Globalization on z/OS systems - OpenSSH and globalization
この記述によるとこんな感じです
- SSHクライアント(Windows) - SSHサーバー(z/OS)間の通信では、ASCII-EBCDIC変換が行われる
- ネットワーク上はISO8859-1(ASCII)でデータのやり取りが行われる
- マルチバイトのロケールはサポートされない。つまり日本語はNG。
もう1つ疑問だったのはscp(sshプロトコルを使用したファイル転送)を使う場合。scpはftpのように転送モード(binary/ascii)が無いので基本バイナリーで扱われるものだと思ってましたが、Windows-z/OS間ではコード変換されていました。これについても上のマニュアルに記載がありまして、z/OSのSSHではscpは基本的にファイルはテキストとして扱われ、なんとコード変換の対象になってしまうんですと。ということは逆に言うとバイナリのファイル(tarとか画像とか)をscpで送受信したらどうなるかと思ってやってみると、コード変換してくれちゃったらしく、案の定壊れました。
ということで、z/OSとの間でファイル転送する場合はftpとか他の仕組みを考えた方がよさそうですね(日本語含まないテキストをさくっとコピーする分には便利ですけど)。