远程服务器remote_host=192.168.29.142
用户为remote_www,
用户当前目录为/home/remote_www

本地服务器local_host=192.168.29.135
用户为local_www
用户当前目录为/home/local_www

1.首先查看在本地服务器用户当前目录下是否有.ssh目录,即是否存在/home/local_www/.ssh/  如果没有.ssh目录,则创建:
$mkdir .ssh

在local_host机下生成公钥/私钥对。
$ssh-keygen -t rsa -P ''
-t表示密钥类型
-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
该命令将在/local_www/.ssh目录下面产生一对密钥id_rsa和id_rsa.pub。
一般采用的ssh的rsa密钥:
id_rsa     私钥
id_rsa.pub 公钥
下述命令产生不同类型的密钥
ssh-keygen -t dsa
ssh-keygen -t rsa
ssh-keygen -t rsa1

Generating public/private rsa key pair.
生成公钥/私钥rsa密钥对。

Enter file in which to save the key (/home/local_www/.ssh/id_rsa): 
输入要保存密钥的文件

Your identification has been saved in /home/local_www/.ssh/id_rsa.
您的身份已保存在/home/local_www/.ssh/id_rsa中。

Your public key has been saved in /home/local_www/.ssh/id_rsa.pub.
您的公开金钥已储存在/home/local_www/.ssh/id_rsa.pub中。

The key fingerprint is:
关键指纹是:

ac:a7:4b:bd:3e:ae:a6:de:0f:b8:43:fe:c3:24:2d:b5 www@gold-dev002
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|      ..         |
|     o .S        |
|    +.Eo         |
|   o.=+ o        |
|    o+++..       |
|   .+=*B=.       |
+-----------------+

2.查看在远程sftp服务器用户当前目录是否有.ssh目录,即是否存在/home/remote_wwwr/.ssh/  如果没有.ssh目录,则创建:
$mkdir .ssh

3.将本地服务器生成的公钥上传到远程sftp服务器的/home/remote_www/.ssh/下

$scp id_dsa.pub remote_www@remote_host:/home/remote_www/.ssh/

4.查看在远程sftp服务器用户当前目录的.ssh目录是否有authorized_keys文件  如果有则把新生成的公钥追加到authorized_keys:

$cat id_dsa.pub >> authorized_keys
(将id_rsa.pub的内容追加到authorized_keys中)

如果没有则把公钥id_dsa.pub重命名为authorized_keys:

$mv id_dsa.pub authorized_keys
$chmod 644 authorized_keys
修改文件的读写权限

5.测试在本地服务器上,以local_www登录
$sftp remote_www@remote_host如果成功则进入sftp服务器
sftp>
如果不成功,则提示要输入密码

简单测试代码:

function fileUpload($fileName)
{ $sftp = 'ssh2.sftp://'; //远程host
$remoteServer = 'remote.com'; //远程服务器端口
$remoteServerPort = 22; //远程服务器用户名
$remoteServerUsername = 'www'; //本地公钥文件
$pubkey = '/local/id_rsa.pub'; //本地私钥文件
$prikey = '/local/id_rsa'; //连接SSH2服务器
$resConnection = ssh2_connect($remoteServer, $remoteServerPort);
if (!is_resource($resConnection)) {
die('连接失败');
} //上传到远程服务器的绝对目录
$remotePath = '/data/other/' . $fileName; //本地服务器的绝对目录
$localPath = '/data/other' . $fileName; //密钥身份校验
if (ssh2_auth_pubkey_file($resConnection, $remoteServerUsername, $pubkey, $prikey)) {
//初始化SFTP子系统
$resSFTP = ssh2_sftp($resConnection);
if (!is_resource($resSFTP)) {
die('初始化SFTP子系统');
}
} else {
die('密钥身份校验');
} if (!file_exists($sftp . $resSFTP . $remotePath)) {
$mkdir = ssh2_sftp_mkdir($resSFTP, $remotePath, 0755, true);
if (!$mkdir) {
die('文件夹创建失败');
}
} //通过SCP发送文件
$sendbol = ssh2_scp_send($resConnection, $localPath, $remotePath, 0777);
if (!$sendbol) {
die('上传文件失败');
} //没有关闭SSH会话,内部缓冲区不会被刷新,文件将不写入到磁盘
ssh2_exec($resConnection, 'exit'); return true;
}

  

SFTP远程文件上传的更多相关文章

  1. 配置openssh实现sftp远程文件上传

    客服端:winscp等ftp/sftp客户端 服务器:阿里云默认使用的openssh 需求:可以sftp远程传输文件到服务器固定文件夹下,不可远程ssh登录 步骤: 1. 建立系统用户ftpuser及 ...

  2. SFTP多文件上传,删除

    公司项目中需要把项目的相关文件上传到服务器的tomcat中,需要在项目中进行以下几步操作: 1.添加项目信息,包括名称,描述,服务器ip,sftp的用户名,密码,端口号等,存在配置,部署,删除等操作 ...

  3. 【转】JSch - Java实现的SFTP(文件上传详解篇)

    JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...

  4. JSch - Java实现的SFTP(文件上传详解篇)

    JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...

  5. JSch - Java实现的SFTP(文件上传详解篇) [转载]

    文章来源:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch是Java Secure Channel的缩写.JSch是 ...

  6. JSch - Java实现的SFTP(文件上传详解篇)(转)

    JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...

  7. Java使用 SFTP实现文件上传下载

    package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...

  8. Jsch - java SFTP 文件上传下载

    使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...

  9. Windows VS2017 编译 libssh2 1.7.0(执行命令、文件上传、下载)

    下载安装 OpenSSL 要编译 libssh2,必须先编译好 OpenSSL 的静态库,直接从 http://slproweb.com/products/Win32OpenSSL.html 下载已经 ...

随机推荐

  1. doubango(5)--SIP协议栈传输层的启动

    SIP协议的INVITE消息发起流程 当通过sip协议发起一个会话时,需要通过invite消息实现该流程.而SIP协议是一个基于事务的协议,每一个sip会话的都是通过sip部件间的一系列消息来完成的. ...

  2. MVC 怎么把string字符串转译成html格式

    Views层下:

  3. 性能优化实战案例——助力某移动OA系统

    前言 最近连续接触了4个OA系统,均存在着不同的性能问题,本文记述对某移动OA系统的优化全过程,让看官们对数据库优化流程有一个了解,并揭开隐式转换这无情杀手的神秘面纱. 本文使用的工具:SQL专家云平 ...

  4. BZOJ两水题连发~(BZOJ1854&&BZOJ1191)

    前言:两题都是省选题不过水的惊人,且都可以用二分图最大匹配做哎--- 1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: ...

  5. DTLS-PSK算法抓包解析

    一.DTLS -PSK PSK 是DTLS 定义的密钥交换方案之一,相对于公钥证书方案(如 ECDHA_RSA) 来说,其具备更加轻量化.高效的优点: 而目前 PSK方案应用也比较广泛. 关于DTLS ...

  6. Spark:使用Spark Shell的两个示例

    Spark:使用Spark Shell的两个示例 Python 行数统计 ** 注意: **使用的是Hadoop的HDFS作为持久层,需要先配置Hadoop 命令行代码 # pyspark >& ...

  7. [JQuery] Ajax使用过程中的问题总结

    JQuery提供的ajax函数,在使用过程中,因为对参数的不了解,导致了很多错误,现在总结如下,以便时常温固,不犯同样的错误. 1.我在项目中使用到的ajax请求格式如下: $.ajax({ url: ...

  8. 类似qq空间的无限回复怎么实现??

    在开发网站的时候遇到这样一个问题,下面是自己的一些思路: 1.把数据库简单的设计出来了 2.这是自己写的简单的例子 3.图表形式 1:   1.发表一篇文章 2:  2给1评论 3:  3给2评论 2 ...

  9. (@WhiteTaken)设计模式学习——抽象工厂模式

    抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的 ...

  10. 拆开Ceph看队列和线程

    作者:吴香伟 发表于 2017/01/08 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 我上小学时家离学校很远,家在某某山脚,学校在镇里.每周回家一趟,周五放 ...