SFTP远程文件上传
远程服务器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远程文件上传的更多相关文章
- 配置openssh实现sftp远程文件上传
客服端:winscp等ftp/sftp客户端 服务器:阿里云默认使用的openssh 需求:可以sftp远程传输文件到服务器固定文件夹下,不可远程ssh登录 步骤: 1. 建立系统用户ftpuser及 ...
- SFTP多文件上传,删除
公司项目中需要把项目的相关文件上传到服务器的tomcat中,需要在项目中进行以下几步操作: 1.添加项目信息,包括名称,描述,服务器ip,sftp的用户名,密码,端口号等,存在配置,部署,删除等操作 ...
- 【转】JSch - Java实现的SFTP(文件上传详解篇)
JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...
- JSch - Java实现的SFTP(文件上传详解篇)
JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...
- JSch - Java实现的SFTP(文件上传详解篇) [转载]
文章来源:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch是Java Secure Channel的缩写.JSch是 ...
- JSch - Java实现的SFTP(文件上传详解篇)(转)
JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...
- Java使用 SFTP实现文件上传下载
package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...
- Jsch - java SFTP 文件上传下载
使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...
- Windows VS2017 编译 libssh2 1.7.0(执行命令、文件上传、下载)
下载安装 OpenSSL 要编译 libssh2,必须先编译好 OpenSSL 的静态库,直接从 http://slproweb.com/products/Win32OpenSSL.html 下载已经 ...
随机推荐
- Refused to set unsafe header "Connection"
参考 http://stackoverflow.com/questions/7210507/ajax-post-error-refused-to-set-unsafe-header-connectio ...
- JAVA中Singleton的用法
Java Singleton模式属于管理实例化过程的设计模式家族.Singleton是一个无法实例化的对象.这种设计模式暗示,在任何时候,只能由JVM创建一个Singleton(对象)实例. JAVA ...
- Android 自定义通用的loadingview
介绍 好久没有写博客啦,最近在接近新年了,年前的工作都要收尾,所以特别忙,周末抽空写了个通用的加载view,写篇博客分享出来. 功能 1.显示加载视图,加载失败的时候显示加载失败视图,数据为空时显示数 ...
- C++ 头文件系列(forward_list)
简介 forwrad_list字面意思为前向列表,但实际上它是一种单向列表,只能从单一方向遍历. 单向链表实现 forward_list内部是用单向列表实现的,并且设计该库的时候就是以近乎手写的单向链 ...
- HDU3410(单调队列)
Passing the Message Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- iOS网络层设计感想
App的开发无外乎从网络端获取数据显示在屏幕上,数据做些缓存或者持久化,所以网络层极为重要.原来只是把AFNetwork二次封装了一下,使得调用变得很简单,并没有深层次的考虑一些问题. 前言 参考: ...
- 用 Lua 实现一个微型虚拟机-基本篇
用 Lua 实现一个微型虚拟机-基本篇 目录 介绍 机器指令模拟 最终核心代码 虚拟机内部状态可视化 完整项目代码 后续计划 参考 介绍 在网上看到一篇文章 使用 C 语言实现一个虚拟机, 这里是他的 ...
- java-9 异常处理
1.异常处理的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如 ...
- 一个web应用的诞生(6)--用户账户
之前登录注册的功能都已经完成,但是登录成功回到首页发现还是白茫茫的一片,对的,title一直都写得博客,那么最终目的也是写出一个轻博客来,但是,在发表文章之前是不是要先记录一下登录状态呢? 用户登录 ...
- 安装msdn出现的问题及解决
安装msdn出现的问题及解决 用xx.iso 镜象文件安装 运行第一个镜象文件的setup.exe安装到一部分提示:安装程序无法打开文件 C:\Documents and Settings\empty ...