channel session io ssh远程

十八岁的吴彦祖 2017-08-10 02:20:17

是能帮我解释这段代码 ?

public void uploadSingleDataToServer(String fromLocalFile,
String toServerFile) throws Exception {
//本地执行判断
if (new File(fromLocalFile).isDirectory())
{
throw new UploadFileNotSuccessException(fromLocalFile);
}

FileInputStream fis = null;

// exec 'scp -t toServerFile' remotely
//logger.putMsg(Logger.INFO,"Ready to transfer local file '" + fromLocalFile+ "' to server directory '" + toServerFile + "'");

String command = "scp -p -t " + toServerFile;
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);

// get I/O streams for remote scp
OutputStream out = channel.getOutputStream();
InputStream in = channel.getInputStream();
channel.connect();

//logger.putMsg(Logger.INFO,"Connection channel established succesfully");
//logger.putMsg(Logger.INFO,"Start to upload");
if (SSHExecUtil.checkAck(in) != 0) {
System.exit(0);
}

// send "C0644 filesize filename", where filename should not include '/'

long filesize = (new File(fromLocalFile)).length();
command = "C0644 " + filesize + " ";
if (fromLocalFile.lastIndexOf('/') > 0) {
command += fromLocalFile
.substring(fromLocalFile.lastIndexOf('/') + 1);
} else if (fromLocalFile.lastIndexOf('\\') > 0) {
command += fromLocalFile
.substring(fromLocalFile.lastIndexOf('\\') + 1);
}
else {
command += fromLocalFile;
}
command += "\n";
out.write(command.getBytes());
out.flush();
if (SSHExecUtil.checkAck(in) != 0) {
//logger.putMsg(Logger.INFO,fromLocalFile + "check fails");
return;
}

// send a content of lfile
fis = new FileInputStream(fromLocalFile);
byte[] buf = new byte[1024];
while (true) {
int len = fis.read(buf, 0, buf.length);
if (len <= 0)
break;
out.write(buf, 0, len); // out.flush();
}
fis.close();
fis = null;

// send '\0'
buf[0] = 0;
out.write(buf, 0, 1);
out.flush();
if (SSHExecUtil.checkAck(in) != 0) {
//logger.putMsg(Logger.ERROR,toServerFile + "check fails");
return;
}

out.close();
//logger.putMsg(Logger.INFO,"Upload success");
channel.disconnect();
//logger.putMsg(Logger.INFO,"channel disconnect");
}
...全文
191 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianfang 2017-08-11
  • 打赏
  • 举报
回复
调用系统命令,做远程拷贝
基本的命名约定是svr -和cli为独立的部分,然后共同——共同的部分。一些文件没有前缀。 哪些文件做简短的破败,IETF草案中相应的部分。的。c文件通常有相应。h文件。 传输层draft-ietf-secsh-transport-16。txt = = = = = = = = = = = = = = = session.c包含主要的选择()循环,和处理设置/关闭ssh连接 algo.c处理各种密码/散列算法框架,并选择之间的客户机/服务器的列表 首选的 kex.c密钥交换程序,用于启动谈判使用哪个算法,并获得会话 这也运行期间无线电发射密匙 连接。 packet.c处理的基本包加密/解密,并切换到适当的包处理程序。 session.c的主要选择循环。 service.c处理服务请求(userauth或连接) 身份验证draft-ietf-secsh-userauth-17。txt = = = = = = = = = = = = = = auth.c将军身份验证处理,包括用户检查等,通过不同的身份验证类型auth { passwd,pubkey } authpasswd.c处理/etc/passwd或/etc/shadow身份验证 authpubkey.c处理~/.ssh/authorized_keys auth draft-ietf-secsh-connect-17连接。txt = = = = = = = = = = channel.c通道处理例程,每个壳/ tcp康涅狄格州/代理等渠道。 chansession.c shell / exec请求处理 sshpty.c 从OpenSSH,分配企业等 termcodes.c POSIX终端代码SSH终端代码的映射 loginrec.c从OpenSSH,处理utmp / wtmp日志记录 x11fwd.c处理X11转发 agentfwd.c处理auth-agent转发请求 localtcpfwd.c - l风格处理tcp转发请求,设置监听端口并处理连接 该端口(以及随后的渠道) 与规划相关的= = = = = = = = = = = = = = = dbmulti.c结合二进制选择者main()函数 dbutil.c各种实用功能,包括日志、内存等 dropbearconvert.c转换从dropbear < - > openssh密钥,使用keyimport。c做大部分的工作 dropbearkey.c生成密钥,称创{ dss,rsa } keyimport.c修改腻子,关键类型之间的转换 main.c dropbear的主要(),处理听、分叉为新连接,子进程的限制 runopts.c解析命令行选项 options.h编译时特征选择 config.h从配置选择h特性 debug.h 编译时选择调试功能 includes.h 包含系统头文件等等 通用程序= = = = = = = = = = = = = = = = signkey.c为pubkeys c一个通用的处理程序,切换到dss或rsa取决于类型的关键 rsa.c rsa非对称加密例程 dss.c dss不对称加密例程 gendss.c dss键生成 genrsa.c rsa密钥生成 bignum.c一些bignum helper函数 queue.c 一个队列,用于排队加密数据包发送 random.c prng,基于/dev/urandom或prngd atomicio.c从OpenSSH c,并在非阻塞IO fds“阻塞” buffer.c缓冲区使用例程,尺寸检查等 vim:设置ts = 8:

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧