已成功SFTP连接iSeries,如何向Library目录写入文件?
解决Linux到iSeries Library目录的SFTP上传问题
我编写了一个从Linux源服务器向iSeries服务器的Library目录传输文件的脚本,SFTP连接部分如下:
sftp -oIdentityfile=/root/.ssh/id_rsa my_user@server.mydomain.com <<EOF cd /qsys.lib/folder.lib put *.txt exit EOF目前已能成功SFTP连接iSeries服务器,也可切换至
/qsys.lib/user.lib目录,但无法向该Library目录上传文件。请问能否通过在脚本中添加额外命令实现向该目标路径写入文件?
可行的解决方法
1. 明确指定QSYS对象格式上传
iSeries的Library目录本质是QSYS对象容器,直接上传文件需要指定物理文件和成员的格式。修改put命令,明确目标对象的结构:
sftp -oIdentityfile=/root/.ssh/id_rsa my_user@server.mydomain.com <<EOF cd /qsys.lib/folder.lib # 将local.txt上传为folder.lib下的myfile.file物理文件中的myfile.mbr成员 put local.txt myfile.file/myfile.mbr exit EOF
如果需要批量上传,可在Linux端循环处理每个txt文件,对应不同的成员名。
2. 先传临时目录再用CL命令导入
若直接SFTP到Library受限,可先上传到iSeries的普通用户目录,再通过SSH执行CPYFRMSTMF命令将流文件转换为Library中的物理文件成员:
# 第一步:SFTP上传到临时目录 sftp -oIdentityfile=/root/.ssh/id_rsa my_user@server.mydomain.com <<EOF put *.txt /home/my_user/temp/ exit EOF # 第二步:SSH执行CL命令导入到Library ssh -i /root/.ssh/id_rsa my_user@server.mydomain.com "CPYFRMSTMF FROMSTMF('/home/my_user/temp/file.txt') TOFILE(FOLDER/MYFILE) TOMBR(MYMBR) MBROPT(*REPLACE) CVTDTA(*AUTO)"
参数说明:
MBROPT(*REPLACE):覆盖已有成员内容,用*ADD可追加CVTDTA(*AUTO):自动转换文本编码,也可指定*TEXT强制文本格式
3. 检查并确认权限
确保SFTP用户对目标Library拥有*OBJOPR和*ADD权限,对要创建的物理文件拥有*CRT权限。可通过SSH执行命令检查:
ssh -i /root/.ssh/id_rsa my_user@server.mydomain.com "DSPOBJA OBJ(FOLDER) OBJTYPE(*LIB)"
权限不足时需联系iSeries管理员调整。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

