通过SSH向Linux机器传送文件的方法

这里要讨论的是仅仅通过SSH向Linux机器传送文件的文法,并且是向一台小系统机器传送文件的方法。

通常来说,向Linux服务器传送文件,可以选择ftp、samba共享、sftp、scp等方式,但是,如果以上的服务都没有,而仅仅有sshd的情况下,就没这么简单了。我们假设需要从系统完整的机器B向小系统机器A传送文件,并且机器A上仅有sshd服务,则可以有这样的解决办法:

1、若机器A上有ssh客户端可用,则可以在机器A上通过命令

[hostA]#ssh hostA "cat file_on_B" > file_on_A

得到你所需要的文件

2、若机器A上没有ssh客户端,仅有sshd服务,且没有scp、sftp,那问题就有点复杂了。首先,我们可以通过与方法1类似的途径传送文件:

[hostB]#ssh hostA "echo '`cat file_on_B`' > file_on_A"

注意,这是从系统完整的机器B向机器A传送文件,并且几个引号的顺序需要特别小心。相对于方法1,这个命令只能对文本文件的传输起作用。那二进制文件怎么办呢?可以首先通过ssh-keygen生成一认证密钥对,即:

[hostB]#ssh-keygen -t rsa

回答了若干问题以后,会在用户目录根下的.ssh目录下生成id_rsa和id_rsa.pub,其中pub文件表示是公钥。它们是ssh认证使用的密钥对,使用它们就可以在ssh连接中不使用密码。而这两个文件都是文本文件。于是,我们将id_rsa.pub通过之前的方法传送到机器A,并存放于用户目录的.ssh目录下,更名为authorized_keys。则,此时从机器B通过ssh访问机器A已经不需要输入密码。这样,可以用命令:

[hostB]#cat file_on_B | ssh host-A "cat > file_on_A"

进行任意文件的传输,包括二进制文件和文本文件。