ssh c语言 传文件,用 SSH 来传输文件

用 SSH 来传输文件

PuTTY 提供了两个文件传输工具

PSCP (PuTTY Secure Copy client)

PSFTP (PuTTY SFTP client)

PSCP 通过 SSH 连接,在两台机器之间安全的传输文件,可以用于任何 SSH(包括 SSH v1、SSH v2) 服务器。

PSFTP 则是 SSH-2 中新增的特性,使用的是新的 SFTP 协议,使用上与传统的 FTP 类似。事实上 PSCP 如果发现 SFTP

可用,PSCP就会使用 SFTP 协议来传输文件,否则还是 SCP 协议。PSFTP 与 PSCP 相比,PSFTP

的优点是可以与服务器进行交互,遍历服务器上的文件系统,在一个会话中上传或下载多个文件。而 PSCP

只能一次传输一个文件,传输完毕后立刻终止会话。

PSCP 的使用

在控制台直接执行 pscp 可以看到帮助

C:>pscp

PuTTY Secure Copy client

Release 0.58

Usage: pscp [options] [user@]host:source target

pscp [options] source [source...] [user@]host:target

pscp [options] -ls [user@]host:filespec

Options:

-V print version information and exit

-pgpfp print PGP key fingerprints and exit

-p preserve file attributes

-q quiet, don't show statistics

-r copy directories recursively

-v show verbose messages

-load sessname Load settings from saved session

-P port connect to specified port

-l user connect with specified username

-pw passw login with specified password

-1 -2 force use of particular SSH protocol version

-4 -6 force use of IPv4 or IPv6

-C enable compression

-i key private key file for authentication

-batch disable all interactive prompts

-unsafe allow server-side wildcards (DANGEROUS)

-sftp force use of SFTP protocol

-scp force use of SCP protocol

C:>可以看出 PSCP 的使用是很简单的,把常用的几个选项说一下:

-q 安静模式,传输文件时什么也不显示,否则会显示出文件的传输进度,默认是关闭的

-P port 指定服务器的 SSH 端口,注意这个是大写字母 P,默认是 -P 22,如果主机的 SSH 端口就是 22,就不用指定了

-l user 指定以哪个用户的身份登录主机,如果没有指定,则 PSCP 会在 PuTTY 保存的同名 Session 中获得默认的用户名称。用户名称也可以和主机名称写在一起,用 @ 分割开,比如:username@server

-pw passwd 指定登录时所用的口令为 passwd

-i keyfile 就是指定登录时所用的密钥文件

后面指定的主机名也可以是 PuTTY 中保存的 Session 名称。比如我们在 PuTTY 中保存了一个名为 foobarserver

的会话,而我们所在的网络又的确没有名为 foobarserver 的主机名称。而在这个 foobarserver 会话中保存的主机名称是

demo-server,保存的自动登录的用户是 taylor。那么用命令

pscp c:autoexec.bat foobarserver:backup/就把本地的 c:autoexec.bat 复制到了主机 demo-server 上的用户 taylor 所在的主目录下的 backup 子目录中(这个路径可能是 /home/taylor/backup

所以 PSCP 大致用法的例子就是:

pscp -P 22 -i c:pathyour-private-key.ppk -C username@server:/remote/path/

下面还是用一些实例来说明会比较简单一些:

把本地的 C:pathfoo.txt 复制到远程主机 192.168.6.200 的 /tmp 目录下

pscp c:pathfoo.txt 192.168.6.200:/tmp 把本地的 C:pathfoo.txt 复制到主机 192.168.6.200 的 /tmp 目录下,但是以主机上的用户 taylor 的权限执行

pscp c:pathfoo.txt taylor@192.168.6.200:/tmp 或者是

pscp -l taylor c:pathfoo.txt 192.168.6.200:/tmp 把本地的 C:pathfoo.txt 传送到主机 192.168.6.200 的 /tmp 目录下,但是主机的 SSH 端口是 3122

pscp -P 3122 c:pathfoo.txt 192.168.6.200:/tmp 把本地的 C:pathfoo.txt 复制到主机 192.168.6.200 的用户 taylor 的主目录下

pscp c:pathfoo.txt taylor@192.168.6.200:. 把主机 192.168.6.200 上的用户 taylor 主目录下的所有 *.tgz 文件拷贝到本地的 c:backup 目录中,如果 SSH 版本是 SSH v1,那这个命令就会出错。

pscp taylor@192.168.6.200:*.tgz c:backup

再来看看 PSFTP

在控制台执行命令 psftp -h,可以得到 psftp 的帮助

C:>psftp -h

PuTTY Secure File Transfer (SFTP) client

Release 0.58

Usage: psftp [options] [user@]host

Options:

-V print version information and exit

-pgpfp print PGP key fingerprints and exit

-b file use specified batchfile

-bc output batchfile commands

-be don't stop batchfile processing if errors

-v show verbose messages

-load sessname Load settings from saved session

-l user connect with specified username

-P port connect to specified port

-pw passw login with specified password

-1 -2 force use of particular SSH protocol version

-4 -6 force use of IPv4 or IPv6

-C enable compression

-i key private key file for authentication

-batch disable all interactive prompts

C:>用法与 PSCP 大同小异,虽然有个 -load 选项,其实这个没啥用,后面用主机名的时候,与 PSCP 一样直接用上会话名称就可以了。

用 PSFTP 登录到服务器上以后,操作与 FTP 差不多,这里简单的说一下吧:

open 登录主机

open [username@][port]

比如:open taylor@demo-server 3022

就是以用户 taylor 的身份,登陆到主机 demo-server 上,SSH 端口是 3022

open demo-server

登陆 demo-server,这里的 demo-server 可以是PuTTY 中已经保存的会话名称,也可以是主机的名称,如果主机名称与会话名称相同,以会话名称为准。

close 关闭 SFTP 连接

这个没啥说的,close 就关闭了 SFTP 连接

quit 结束本次的 SFTP 会话

也没啥用法,就是关闭了 PSFTP 这个程序

help [command] 帮助

直接打 help 就可以看到帮助指令,后面指定上 一个命令就可以查看该命令的帮助,比如: help open

cd [directory] 改变当前目录

pwd 察看当前目录

lcd [directory] 改变本地目录

lpwd 察看本地当前目录

get [-r] 从服务器下载一个文件/目录,这个命令不能用通配符,参数 -r 可以递归下载整个目录

put [-r] [dest] 把文件/目录上传到服务器,这个命令不能用通配符,参数 -r 可以递归上传整个目录

mget [-r] 从服务器下载一批文件/目录,可以用通配符,-r 的含义与 get 一样

mget [-r] [dest] 把一批文件/目录上传到服务器,可以用通配符,-r 的含义与 put 一样

reget [-r] 从服务器续传下载一个文件/目录,这个命令不能用通配符,-r 的含义与 get 一样

reput [-r] [dest] 把一批文件/目录续传上传到服务器,这个命令不能用通配符,-r 的含义与 put 一样

dir [directory] 列目录

ls 和 dir 一样

chmod [file|directory] 改变文件的权限,与 Unix 的 chmod 命令类似

del 删除文件,要注意的是 del 只能删除文件

rm 与 del 一样

mkdir 创建一个目录

rmdir 删除一个空目录,只有空目录才可以被删除

mv 改名/移动。如果源和目的都是文件或目录,则是改名。如果目的是目录的话,则是移动。

! 在本地命令前加一个感叹号,就可以直接执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是AI语言模型,无法提供完整的代码。但是,我可以给你一些指导,帮助你了解如何编写一个简单的SSH终端。 首先,SSH终端是一种远程登录协议,可以在网络上安全地远程登录到另一台计算机。这需要使用SSH协议进行加密和身份验证。因此,你需要使用SSH库来编写SSH终端。 在C语言中,libssh是一个常用的SSH库。它可以让你创建SSH连接,进行身份验证,执行命令和传输文件等。你可以使用以下步骤来编写一个基本的SSH终端: 1. 引入libssh库,包括libssh.h头文件和libssh.so库文件。 2. 创建SSH连接,使用ssh_new()函数创建一个ssh_session对象。 3. 设置SSH连接的参数,如远程主机地址,端口号,用户名和密码等。 4. 连接到SSH服务器,使用ssh_connect()函数连接到远程服务器。 5. 进行身份验证,使用ssh_userauth_password()函数进行基于密码的身份验证,或者使用ssh_userauth_publickey()函数进行基于公钥的身份验证。 6. 执行命令,使用ssh_channel_request_exec()函数执行远程命令。 7. 读取命令输出,使用ssh_channel_read()函数读取远程命令的输出。 8. 关闭SSH连接,使用ssh_disconnect()函数关闭SSH连接。 上述步骤是一个简单的SSH终端实现的基本流程。但是,实际开发中需要考虑更多的安全性和稳定性问题,比如错误处理,超时控制,日志记录等。因此,在编写SSH终端时需要仔细考虑这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值