php连接sftp的作用以及实例代码
sftp协议
使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议。
区别:
sftp是ssh内含的协议(ssh是加密的telnet协议),只要sshd服务器启动了,它就可用,而且sftp安全性较高,它本身不需要ftp服务器启动。sftp=ssh+ftp(安全文件传输协议)。
由于ftp是明文传输的,没有安全性,而sftp基于ssh,传输内容是加密过的,较为安全。目前网络不太安全,以前用telnet的都改用ssh2(SSH1已被破解)。
sftp这个工具和ftp用法一样。但是它的传输文件是通过ssl加密了的,即使被截获了也无法破解。而且sftp相比ftp功能要多一些,多了一些文件属性的设置
//注意这里只是为了介绍ftp,并没有做验证; classftp{ //初始配置为NULL private$config=NULL; //连接为NULL private$conn=NULL; publicfunctioninit($config){ $this->config=$config; } //ftp连接 publicfunctionconnect(){ return$this->conn=ftp_connect($this->config['host'],$this->config['port'])); } //传输数据传输层协议,获得数据trueorfalse publicfunctiondownload($remote,$local,$mode='auto'){ return$result=@ftp_get($this->conn,$localpath,$remotepath,$mode); } //传输数据传输层协议,上传数据trueorfalse publicfunctionupload($remote,$local,$mode='auto'){ return$result=@ftp_put($this->conn,$localpath,$remotepath,$mode); } //删除文件 publicfunctionremove($remote){ return$result=@ftp_delete($this->conn_id,$file); } } //使用 $config=array( 'hostname'=>'localhost', 'username'=>'root', 'password'=>'root', 'port'=>21 ); $ftp=newFtp(); $ftp->connect($config); $ftp->upload('ftp_err.log','ftp_upload.log'); $ftp->download('ftp_upload.log','ftp_download.log'); /*根据上面的三个协议写出基于ssh的ftp类 我们知道进行身份认证的方式有两种:公钥;密码; (1)使用密码登陆 (2)免密码登陆也就是使用公钥登陆 */ classsftp{ //初始配置为NULL private$config=NULL; //连接为NULL private$conn=NULL; //是否使用秘钥登陆 private$use_pubkey_file=false; //初始化 publicfunctioninit($config){ $this->config=$config; } //连接ssh,连接有两种方式(1)使用密码 //(2)使用秘钥 publicfunctionconnect(){ $methods['hostkey']=$use_pubkey_file?'ssh-rsa':[]; $con=ssh2_connect($this->config['host'],$this->config['port'],$methods); //(1)使用秘钥的时候 if($use_pubkey_file){ //用户认证协议 $rc=ssh2_auth_pubkey_file( $conn, $this->config['user'], $this->config['pubkey_file'], $this->config['privkey_file'], $this->config['passphrase']) ); //(2)使用登陆用户名字和登陆密码 }else{ $rc=ssh2_auth_password($conn,$this->conf_['user'],$this->conf_['passwd']); } return$rc; } //传输数据传输层协议,获得数据 publicfunctiondownload($remote,$local){ returnssh2_scp_recv($this->conn_,$remote,$local); } //传输数据传输层协议,写入ftp服务器数据 publicfunctionupload($remote,$local,$file_mode=0664){ returnssh2_scp_send($this->conn_,$local,$remote,$file_mode); } //删除文件 publicfunctionremove($remote){ $sftp=ssh2_sftp($this->conn_); $rc=false; if(is_dir("ssh2.sftp://{$sftp}/{$remote}")){ $rc=false; //ssh删除文件夹 $rc=ssh2_sftp_rmdir($sftp,$remote); }else{ //删除文件 $rc=ssh2_sftp_unlink($sftp,$remote); } return$rc; } } $config=[ "host"=>"192.168.1.1",//ftp地址 "user"=>"***", "port"=>"22", "pubkey_path"=>"/root/.ssh/id_rsa.pub",//公钥的存储地址 "privkey_path"=>"/root/.ssh/id_rsa",//私钥的存储地址 ]; $handle=newSftpAccess(); $handle->init($config); $rc=$handle->connect(); $handle->getData(remote,$local);
以上就是本次介绍的全部知识点内容,感谢大家的学习和对毛票票的支持。