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功能要多一些,多了一些文件属性的设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 | // 注意这里只是为了介绍ftp ,并没有做验证 ; class ftp{ // 初始配置为NULL private $config =NULL ; // 连接为NULL private $conn = NULL; public function init( $config ){ $this ->config = $config ; } // ftp 连接 public function connect(){ return $this ->conn = ftp_connect( $this ->config[ 'host' ], $this ->config[ 'port' ])); } // 传输数据 传输层协议,获得数据 true or false public function download( $remote , $local , $mode = 'auto' ){ return $result = @ftp_get( $this ->conn, $localpath , $remotepath , $mode ); } // 传输数据 传输层协议,上传数据 true or false public function upload( $remote , $local , $mode = 'auto' ){ return $result = @ftp_put( $this ->conn, $localpath , $remotepath , $mode ); } // 删除文件 public function remove( $remote ){ return $result = @ftp_delete( $this ->conn_id, $file ); } } // 使用 $config = array ( 'hostname' => 'localhost' , 'username' => 'root' , 'password' => 'root' , 'port' => 21 ) ; $ftp = new Ftp(); $ftp ->connect( $config ); $ftp ->upload( 'ftp_err.log' , 'ftp_upload.log' ); $ftp ->download( 'ftp_upload.log' , 'ftp_download.log' ); /*根据上面的三个协议写出基于ssh 的ftp 类 我们知道进行身份认证的方式有两种:公钥;密码 ; (1) 使用密码登陆 (2) 免密码登陆也就是使用公钥登陆 */ class sftp{ // 初始配置为NULL private $config =NULL ; // 连接为NULL private $conn = NULL; // 是否使用秘钥登陆 private $use_pubkey_file = false; // 初始化 public function init( $config ){ $this ->config = $config ; } // 连接ssh ,连接有两种方式(1) 使用密码 // (2) 使用秘钥 public function connect(){ $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 ; } // 传输数据 传输层协议,获得数据 public function download( $remote , $local ){ return ssh2_scp_recv( $this ->conn_, $remote , $local ); } //传输数据 传输层协议,写入ftp服务器数据 public function upload( $remote , $local , $file_mode =0664){ return ssh2_scp_send( $this ->conn_, $local , $remote , $file_mode ); } // 删除文件 public function remove( $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 = new SftpAccess(); $handle ->init( $config ); $rc = $handle ->connect(); $handle ->getData(remote, $local ); |
以上就是本次介绍的全部知识点内容,感谢大家的学习和对脚本之家的支持。
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
PHP正则匹配操作简单示例【preg_match_all应用】
这篇文章主要介绍了PHP正则匹配操作,结合简单实例形式分析了php中preg_match_all针对HTML标签中P元素及img src元素内容的获取技巧,需要的朋友可以参考下2017-07-07php判断输入不超过mysql的varchar字段的长度范围
varchar类型字段,如果你设置长度为10,那么不论汉字和英文都可以存10个。2011-06-06PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
今天修改公司的网站,提示Notice : Use of undefined constant ,通过下面的方法解决了,最好是error_reporting(0);不需要更改配置2012-03-03
最新评论