z/OS UNIX System Servicesと、OpenSSH_9.0以上のSCPクライアントでASCIIテキストファイルを送受信する場合は、-O
オプションを使用しましょう。
以上。
解説
最近は、z/OSでも、セキュリティー上の理由でTELNET, FTPを禁止し、SSH, SCP, SFTPを使用するようになってきています。z/OSでこれらを使う場合のユーザーの最大の関心事は、EBCDICテキストの取り扱いだと思います。
まず初めに、SSHではISO/IEC 8859-1(日本ではA0からFFの領域を使うことが少ないのでASCIIとほぼ同義)しか扱えません。UNIX System Servicesのコンソールで日本語を使用することはあきらめましょう。ASCIIの範囲であれば、SSHはEBCDIC-ASCII変換をしてくれます。
z/OS OpenSSH does not support multibyte locales. z/OS OpenSSH does not support running in multibyte locales. It currently only supports single-byte locales that are compatible with ASCII coded character set ISO/IEC 8859-1.
SCP, SFTPについては、バイナリ転送する場合はSFTP, ASCIIテキストファイルをEBCDIC-ASCII変換して転送する場合はSCPが使用できます。
sftp can treat files as binary or text. By default, sftp assumes that files are binary.
scp treats files as text. By default, scp performs ASCII/EBCDIC conversion on files.
ところで、最近SCPでファイル転送しているつもりなのに、なぜかEBCDIC-ASCII変換をしてくれないことはないでしょうか。
$ echo abcdefg > test.txt
$ scp -i ~ test.txt ~@~:.
test.txt 100% 8 0.1KB/s 00:00
$ ssh -i ~ ~@~
> cat test.txt
/□□□□□Ŏ
> iconv -f utf8 -t ibm1047 test.txt
abcdefg
そういう時は、SCPクライアントのバージョン(OpenSSHのバージョン)を確認しましょう。
$ ssh.exe -V
OpenSSH_9.3p1, OpenSSL 3.1.1 30 May 2023
OpenSSH_9.0以上の場合、SCPは内部でSFTPプロトコルを使用するように変更となっています。
OpenSSH 9.0/9.0p1 (2022-04-08)
~
Changes since OpenSSH 8.9
~
Potentially-incompatible changes
~
This release switches scp(1) from using the legacy scp/rcp protocol
to using the SFTP protocol by default.
$ scp -v -i ~ test.txt ~@~:.
~
debug1: Sending subsystem: sftp
~
SCPでテキストファイルをEBCDIC-ASCII変換して転送したい場合は、-O
オプションを使用してレガシーなSCPプロトコルを使いましょう。
In case of incompatibility, the scp(1) client may be instructed to use
the legacy scp/rcp using the -O flag.
$ scp -O -v -i ~ test.txt ~@~:.
~
debug1: Sending command: scp -v -t .
~
$ ssh -i ~ ~@~
> cat test.txt
abcdefg
よきz/OSライフを。